《Android开发艺术探索》第一章Activity的生命周期和启动方式小节

来源:互联网 发布:网络的危害事例 编辑:程序博客网 时间:2024/06/08 04:35

第一章  Activity的生命周期和启动模式

1. onCreate:setContentView加载布局资源

onRestart,onStart,onResume,onPause,onStop,onDestroy

onStart和onStop表示Activity是否可见,onResume和onPause表示Activity是否位于前台


2. 异常情况下生命周期

资源相关系统配置发生改变导致Activity被重建,调用onSaveInstanceState保存当前状态,调用onRestoreInstanceState或者onCreate来恢复数据;

<activity android:configChanges="orientation|screenSize"> ,可以让转屏时Activity不重建,而是调用onConfigurationChanged方法。

资源内存不足导致低优先级的Activity被杀死,如果一个进程中没有四大组件在执行,那么它很快会被系统杀死,所以将后台工作放入Service中从而保证进程有一定的优先级。


3. 启动模式

standard:标准模式每次启动一个A都会创建一个实例,不管该实例是否已经存在;谁启动了它,它就运行在谁的栈中;

singleTop:栈顶复用,栈顶的实例不会被重建,而是调用它的onNewIntent方法;

singleTask:栈内复用,附带clearTop效果;

singleInstance:单例模式,此种模式的A只能单独位于一个任务栈中

默认情况下,任务栈的名字为包名,可通过taskAffinity修改,taskAffinity主要跟singleTask和allowTaskReparenting起作用。

adb shell dumpsys activity来查看栈的内容;


4. Activity的Flags

FLAG_ACTIVITY_NEW_TASK, 

FLAG_ACTIVITY_SINGLE_TOP, 

FLAG_ACTIVITY_CLEAR_TOP, 

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 不出现在历史Activity列表中,android:excludeFromRecents="true"


5. IntentFilter的匹配规则

只用一个Intent同时匹配action,category和data才算匹配成功,只要能匹配任意一组intent-filter即可。

一组intent-filter中匹配任意一个action,Intent中如果没有制定action,则失败;

Intent中可以没有category(系统默认加上DEFAULT),若有则每个都要能匹配filter中的某一个category。filter中加入category-DEFAULT可以接收隐式调用。

filter中定义了data,则Intent的data必须与它的某一个data匹配,data由mimeType和URI两部分组成,filter中的URI中scheme的默认值为content或file。

调用PackageManager.resolveActivity活着Intent.resolveActivity,可以检查Activity是否可以匹配到,PackageManager.queryIntentActivities可以匹配一组Activity。

<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>



0 0
原创粉丝点击