Activity总结(上)

103 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情

Activity的概念

Activity是用于展示数据,实现与用户的交互的容器。

Activity生命周期

  • onCreate():创建时回调,一般在此处创建视图和绑定数据
  • onStart():已启动,即将进入前台
  • onResume():与用户开始交互,位于Activity栈顶
  • onPause():Actvity失去焦点或已暂停,Activity界面部分可见,下一个生命周期是onResume()或onStop()
  • onStop():Activity不再可见,下一个回调是onRestart()onDestory()
  • onRestart():重启已停止的Activity,下一个回调是onStart()
  • onDestory():销毁Actvity,释放该Activity的所有资源

image.png

保存和恢复界面信息:

  • 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。