一、 深入理解act生命周期&启动模式

来源:互联网 发布:南方周易软件安卓版 编辑:程序博客网 时间:2024/06/01 10:04

act生命周期具体情况的说明

1.act切换回桌面或跳转新act,onPause->onStop,有一种特殊情况,新的act采用透明主题,当前act不会回调onStop
2. act跳转周期方法执行顺序:旧act先onPause(),新act onCreate、onStart、onResume,因此官方文档有这么一句:onPause不能做重量级操作。
3. act onSaveInstanceState(Bundle outState)只会在act即将被销毁并且有机会重现显示情况下调用,如横竖屏转化
4. act优先级
-前台act,正与用户交互
- 可见非前台act,比如弹出一个对话框
- 后台act,已执行onStop,优先级最低
内存不足时,系统会按照上述优先级杀死act,并在后续onSaveInstance来存储和恢复数据

act的launchMode

1.standard 默认模式,注意,ApplicationContext启动此模式act会报错。这是因为,act默认会进入启动它的act所属任务栈,非act的Context根本就没有任务栈。解决此问题,需要为待启动act指定FLAG_ACTIVITY_NEW_TASK标记位,这个act实际是一singleTask模式启动的

2.singleTop ,新act在已经在栈顶则回调onNewIntent,而不是调用Oncreate,onStart.如果没在栈顶,则会重建。如一个任务栈ABCD,若singTop启动D,则仍为ABCD,若standard,则ABCDD

3.singTask,若栈内已存在,则回调onNewIntent。默认有ClearTop效果。

4.关于任务栈,TaskAffinity标识了一个act所需的任务栈名称,默认为包名,也可以为其单独的属性值。TaskAffinity属性主要和singTask启动模式或者allowTaskRepareting属性配对使用。其他没有意义。注意体会

TaskAffinity和singleTask启动模式配对使用时,它是具有该模式的act的目前任务栈名称,待启动的act会运行在名字和taskAffinity相同的任务栈中。
5.两种方式指定启动方式,manifest或intent.addFlag ,后者优先级高,