持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情
Activity的概念
Activity是用于展示数据,实现与用户的交互的容器。
Activity生命周期
onCreate():创建时回调,一般在此处创建视图和绑定数据onStart():已启动,即将进入前台onResume():与用户开始交互,位于Activity栈顶onPause():Actvity失去焦点或已暂停,Activity界面部分可见,下一个生命周期是onResume()或onStop()onStop():Activity不再可见,下一个回调是onRestart()或onDestory()onRestart():重启已停止的Activity,下一个回调是onStart()onDestory():销毁Actvity,释放该Activity的所有资源
保存和恢复界面信息:
onSaveInstanceState():在非正常关闭时回调,用于保存数据,不支持持久化数据onRestoreInstanceState()/onCreate():用于恢复数据
override fun onSaveInstanceState(outState: Bundle?) {
// Save state
outState?.run {
putInt(STATE_SCORE, currentScore)
putInt(STATE_LEVEL, currentLevel)
}
// Always call the superclass so it can save the view hierarchy state
super.onSaveInstanceState(outState)
}
override fun onRestoreInstanceState(savedInstanceState: Bundle?) {
super.onRestoreInstanceState(savedInstanceState)
// Restore state members from saved instance
savedInstanceState?.run {
currentScore = getInt(STATE_SCORE)
currentLevel = getInt(STATE_LEVEL)
}
}
Activity A启动Activity B生命周期变化: A.onPause()->B.onCreate()->B.onStart()->B.onResume()->A.onStop()
-
多窗口模式下,只有一个应用处于
onResume()状态,其他应用处于onPause()状态; -
当Activity被其他Activity或Dialog不完全覆盖时,Activity失去焦点,调用
onPause();当被覆盖的Activity返回前台并获取焦点时,调用onResume(); -
当Activity被其他Activity或Dialog完全覆盖时,Activity失去焦点,进入已停止状态,调用
onPause()->onStop(); 当被覆盖的Activity返回前台获取焦点时,调用onRestart()->onStart()->onResume(); -
当被覆盖的Activity的新实例进入后台,只会调用
onStart()->onResume()。 -
移除堆栈中所有的Activity后,该任务将不复存在。
管理任务
属性
-
taskAffinity
-
launchMode
- standard:default
- singleTop:如果当前任务栈顶部已存在目标Activity,不会启动新的Activity,而是通过
onNewIntent()将intent传给Activity实例。返回按钮将回到该Activity的上一个Activity,而不是该Activity回调onNewIntent()前的状态。 - singleTask:如果另外的任务栈已存在该Activity,将通过
onNewIntent()转达intent启动Activity。否则将创建目标Activity实例和任务栈,将该Activity作为根Activity。虽然 Activity 在新任务中启动,但用户按返回按钮仍会返回到上一个 Activity - singleInstance:目标Activity是任务栈唯一成员。
-
allowTaskReparenting
-
clearTaskOnLaunch
-
alwaysRetainTaskState
-
finishonTaskLaunch
返回堆栈包含了所有前台任务中的Activity
intent标记:
- FLAG_ACTIVITY_NEW_TASK:类似singleTask
- FLAG_ACTIVITY_CLEAR_TOP:当前任务栈已有目标Activity,销毁该Activity之上的其他所有Activity,通过
onNewIntent()传递intent恢复实例。 - FLAG_ACTIVITY_SINGLE_TOP:类似singleTop
- FLAG_ACTIVITY_NEW_TASK+FLAG_ACTIVITY_CLEAR_TOP:查找其他任务中现有Activity,并响应
当在<activity>中声明任务栈,同时在 intent中设置里FLAG,会优先遵循Intent中设置的FLAG。