Activity,Activity调用栈
- onCreate 创建基本元素
- 初始化资源,或在onPause中释放的资源
- onPause/onStop 清除Activity资源,camera,sensor,receivers
- onDestory 清除线程
- activity 在onSaveInstanceState()保存状态到Bundle,在onRestoreInstanceState(),onCreate()恢复状态Bundle,已经默认实项了控件的状态保存
- Activity任务栈
- 栈底元素是整个任务栈发起者
- 一个任务栈Task,表示若干个Activity集合,可以来自不同的App,一个App的Activity也可以在不同的Task中
- LIFO 后进先出
- 启动模式launchmode
- standard
默认启动模式,每次都会创建新的实例 - singleTop
栈顶模式,如果栈顶是要启动的Activity,直接引用,如果不是创建新的Activity,例如qq接受多条消息,弹出的消息界面 - singleTask
单栈模式,要启动的Activity,如果栈中存在该Activity,将其置于栈顶,并将位于上方的Activity销毁,指同一个App中启动它的Activity,如果其他App以singleTask模式启动这个Activity,将会创建新的Activity。但是如果启动的Activity已经在一个任务栈中处于后台,那所在的任务栈会和要启动的Activity一起回到前台,当已经启动的Activity需要按返回键时,就会先返回Activity所在栈的元素
应用:将主Activity设置为singleTask,然后在要退出的Activity中启动主Activity,将他之上的Activity全部销毁,重写onNewIntent(),加上finish(),将最后一个主Activity结束 - singleInstanse
栈中只存在该一个Activity,共享实例,不需要重新创建,类似浏览器,电话
注意:singleTop或singleInstance的Activity A通过startActivityForResult()启动另一个Activity B,直接返回Activity.RESULT_CANCELD ,只能通过Intent绑定数据
- Intent Flag
- Intent.FLAG_ACTIVITY_NEW_TASK 启动的Activity在新的Task中,使用在Service中启动Activity,因为Service没有任务栈
- Intent.FLAG_ACTIVITY_SINGLE_TOP 存在直接引用,不存在创建新的
- Intent.FLAG_ACTIVITY_CLEAR_TOP 与singleTask相同,存在引用并销毁,不存在创建新的
- Intent.FLAG_ACTIVITY_NO_HISTORY 以这种模式启动的Activity C会消失,A->B->C->D,当前Activity栈中为ABD
- 清空任务栈
- clearTaskOnTouch 每次返回该Activity 清除其他Activity,初始化Task,只有一个该Activity
- finishOnTaskLaunch 返回该Activity时,会被finish
- alwaysRetainTaskState 保持当前Task状态,不接受任何清理命令