Activity启动模式中的生命周期

彻底明白Activity启动模式中的生命周期,从此不再成为面试难点。

参考:
https://www.zhihu.com/tardis/zm/art/429845377?source_id=1003
https://developer.aliyun.com/article/951609
https://cloud.tencent.com/developer/article/1763205
Activity启动模式中的生命周期_第1张图片

Activity启动模式

  1. standard(标准模式):默认的启动模式。每次启动一个新的 Activity,系统都会创建一个新的实例,并将它放入任务栈中。
  2. singleTop(栈顶模式):如果要启动的 Activity 已经位于任务栈的顶部,系统就不会创建新的实例,而是会调用现有实例的
    onNewIntent 方法来处理新的 Intent 数据。如果 Activity 不在顶部,则会创建新的实例。
  3. singleTask(单任务模式):在一个任务栈中只能存在一个该类型的 Activity 实例。当启动一个单任务模式的 Activity 时,系统会首先查找任务栈中是否已存在该 Activity 的实例,如果存在,则会把该实例上方的所有 Activity移出任务栈,并将该实例移到任务栈顶部,同时调用其 onNewIntent 方法。如果不存在该实例,则会创建新的实例并放入任务栈顶部。
  4. singleInstance(单实例模式):类似于单任务模式,但是该模式的 Activity不仅在自己的任务栈中只有一个实例,还会为这个任务栈创建一个新的独立任务。

生命周期流程

A和B页面启动模式都是标准模式

情况一:A启动B:A:onPause->B:onCreate->B:onStart->B:onResume->A:onStop
情况二:A启动B后点返回键:B:onPause->A:onRestart->A:onStart->A:onResume->B:onStop->B:onDestroy

A页面是singleTask模式,B页面是singleInstance模式

情况一:A启动B:A:onPause->B:onCreate->B:onStart->B:onResume->A:onStop
情况二:A启动B后点返回键:B:onPause->A:onRestart->A:onStart->A:onResume->B:onStop->B:onDestroy

可以发现上边的情况,生命周期流程是一样的。

A页面是singleInstance模式,B页面是singleTask模式

情况一:A启动B:A:onPause->B:onCreate->B:onStart->B:onResume->A:onStop
情况二:A启动B后点返回键:B:onPause->B:onStop->B:onDestroy,可以发现A页面消失了。这时候如果再次启动A :A:onRestart->A:onStart->A:onNewIntent->A:onResume

总结:singleTop、singleTask、singleInstance在使用已存在的Activity实例时,都将走onNewIntent方法。

不同的启动模式使用场景

  1. standard(默认模式):每次启动一个 Activity 都会创建一个新的实例,适用于大多数场景,如正常的页面跳转。
  2. singleTop:如果要启动的 Activity已经位于任务栈的顶部,则不会创建新的实例,而是重用已有实例。适用于需要频繁切换到同一个 Activity 的场景,比如消息通知点击跳转。
  3. singleTask:如果要启动的 Activity 已经在任务栈中存在,则会将任务栈中该 Activity 上方的其他Activity 清除,然后重用该 Activity。适用于应用的主页,确保应用始终只有一个实例。
  4. singleInstance:每个 Activity 都会在单独的任务栈中,不会与其他 Activity
    共享任务栈。适用于需要独立于其他应用运行的 Activity,比如电话拨号界面。

注意事项: 避免启动MAIN的MainActivity设置为singleTask,这样当用户点击HOME,再重新启动应用时,将始终展示MainActivity,并且此时MainActivity走onNewIntent方法。

你可能感兴趣的:(android知识点,android)