API Guides之Activity

Activity的过滤条件。action用来指明Activity可以响应什么类型的intent,category使得Activity可以接收启动请求,data指明Activity可以处理的数据类型及详情









Activity的生命周期
- onCreate:初始化控件、数据绑定到列表上等一次性操作。Activity进入启动状态,开始可见。Activity进入Created状态,下一个回调总是onStart。onCreate执行完毕的话,Activity就进入了Started状态
- onStart:Activity进入前台可交互的最后准备阶段。Created状态和Started状态都不会停留太久,一旦该方法执行完,就进入Resumed状态,调用onResume方法
- onResume:Activity进入前台,系统在Activity开始与用户交互前调用该方法。此时Activity在任务栈顶部,接收到用户的所有输入。
- onPause:总是接在onResume后面,Activity失去焦点进入暂停状态时调用,此时Activity仍然部分可见。下一个回调是onStop或者onResume。
- onStop:Activity不可见时回调。之后回调onRestart或者onDestory。
- onRestart:停止状态的Activity重新开始会回调这个方法。接着回调onStart。
- onDestory:Activity销毁之前调用。通常用来确保释放Activity的资源。

启动模式:
Manifest指定
1. standard
2. singleTop:如果目标Activity已经在栈顶,直接调用onNewIntent。
3. singleTask:创建一个新的任务栈,目标Activity为根Activity。如果目标Activity已经存在于一个单独的任务栈,则调用onNewIntent,然后该任务栈会调到前台。
4. singleInstance:与singleTask一样,区别在于新的任务栈只能包含目标Activity单个Activity,其启动的Activity会开启一个单独的任务栈来存放。

Intent Flags指定
1. FLAG_ACTIVITY_NEW_TASK:与singleTask一致
2. FLAG_ACTIVITY_SINGLE_TOP:与singleTop一致
3. FLAG_ACTIVITY_CLEAR_TOP:没有对应的launch mode。如果任务栈中已有目标Activity,清空其上所有Activity。然后判断目标Activity的启动模式,如果是standard,则其本身也销毁,然后重新创建,因为standard模式总是会创建新实例。该标志经常与FLAG_ACTIVITY_NEW_TASK合用,用来定位其它任务栈中已有的目标Activity。

返回键总是返回到同一个任务栈的下一个Activity。

affinity用来指定所属的任务栈。通过taskAffinity标签指定,有两种作用。一是在指定了FLAG_ACTIVITY_NEW_TASK标志后,会分配到指定的任务栈。二是Activity同时具有的allowTaskReparenting为true时,如果指定的任务栈转到前台,该Activity会从当前任务栈转到指定的任务栈。

系统默认把离开较久的任务栈清除到只剩根Activity,可以通过以下几种方法修改默认行为:
1. 任务栈的根Activity的alwaysRetainTaskState为true时就不会自动清除
2. 任务栈的根Activity的clearTaskOnLaunch为true时,无论多久,只要离开任务栈,返回就清空到剩根Activity,是上一条的相反。
3. finishOnTaskLaunch对单个Activity生效,包括根Activity。只要离开任务栈,返回回来这个Activity就不在了。

通过Manifest中声明一个任务栈的入口,即指定为Main和Launcher(待证实)





...

singleTask和singleInstance应在指定为ACTION_MAIN和CATEGORY_LAUNCHER的Activity上使用,以免用户无法返回到该任务栈(待证实)

进程和应用的生命周期
比如BroadcastReceiver,如果onReceive方法返回了,系统会认为已经执行完毕,随时可能杀死该进程,但是如果其实在其中执行了子线程操作,就会被误杀,解决方法是使用JobService。

四种进程优先级:
1. 前台进程:
-正在运行onResume的Activity
-有个BroadcastReceiver正在调用onReceive方法
-有个正在调用生命周期的Service(onCreate、onStart、onDestroy)
2. 可见进程:
-正在运行onPause的Activity,可见不可操作
-有个调用了startForeground的Service
-包含了用户意识到的Service,比如壁纸、输入法
3. service进程:包含了startService的Service
4. 缓存进程:比如包含了onStop的Activity,杀死这类进程对于用户使用不会造成太大影响。

进程的优先级可以根据所依赖的进程来提升。

Parcelables和Bundles是用来进行进程间通讯、Activity间信息传递、Activity本身状态恢复的。
Parcelables不适用于数据存储和网络传输。进程间通讯不推荐使用自定义的Parcleable对象,如果使用的话必须确保自定义对象的一致性。

你可能感兴趣的:(Android)