您的位置:首页 > 其它

Activity的启动模式及任务栈的概念简要复习

2018-01-10 15:06 183 查看
一 .Activity的生命周期
两种情况:正常情况的生命周期,异常情况下的生命周期
(一).正常情况下:



onCreate()  --> onStart() -->onResume() -->onPause() -->onStop() --onDestory()
onPause()时用户返回Acitivty,onResume()调用;onStop()时用户返回,onRestart()-->onStart()   ;onStop()由于高优先级的应用需要内存,应用被杀死,用户这时返回Activity,调用onCreate()

1.onStart(),onStop()是从是否可见来回调的,onResume() onPause()是从Activity是否位于前台进行回调的
2.Activity   A-->B 是A先onPause()然后B onCreate() -->onStart() -->onResume()  然后A onStop()

(二) 异常情况下:
由于Activity是异常情况下终止的,系统会调用onSavaInstanceState()来保存当前Activity的状态。这个方法在onStop()之前,它和onPause()没有既定的时序关系。这个方法是在异常情况下会调用,正常情况下不会调用。当Activity被重新重建后,系统会调用onRestoreInstanceState和onCreate来判断Activity是否被重建,onRestoreInstanceState的调用时机在onStart之后。
用户按Home键,或者跳转新的Activity的时候会单独调用onSavaInstanceState()。

和Activity一样,每个View里面都有onSaveInstanceState和onRestoreInstanceState;

二.  Activity的启动模式
(一)Standard   每开启一个Activity,都会重新创建一个实例,经历一遍生命周期方法,谁启动了这个Activity,那么这个Activity就运行在启动它的那个Activity栈中。如果我们用ApplicationContext去启动Activity 会报错,因为非Activity类型的C
9871
ontext并没有任务栈,并不能将standard模式的Activity添加进它的任务栈。解决方法是为待启动的Activity指点FLAG_ACTIVITY_NEW_TASK标记位,这样启动就会为它创建一个新的任务栈,这时候其实是以singleTask
的模式启动。
(二)SingleTop  如果开启的Activity已经在栈顶了,不用重新创建,直接调用onNewIntent。
(三)SingleTask 只要一个Activity在栈中存在,就不会重新创建,如果启动的A存在任务栈中,则直接A上面的出栈并调用onNewIntent();使A位于栈顶,若不存在的话,创建实例并入栈。
(四)SingleInstance  除了具有SingleTask的所有特性之外,具有此模式的Activity只能单独的位于一个任务栈中。

三.什么叫任务栈
TaskAffinity(任务栈相关性)这个参数标识了一个Activity所需要的任务栈的名字,默认任务栈的名字为应用的包名,必须和singleTask启动模式和allowTaskReparenting属性配对使用,其他地方使用没有意义。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: