Activity启动模式

Activity生命周期经常在面试中被问到。

本文目录

  • 问题:ABC三个Activity,B是SingleInstance启动模式,AC是默认的,也就是标准启动模式,那么A启动B,B启动C,再按返回键,它们的生命周期是怎样的?
  • 官网关于启动模式是怎么说的?
  • 问题:ABCD四个Activity,如果B是singleTask的启动模式,其余默认,ABCD依次启动,D再启动B,生命周期是怎么样的?

问题:ABC三个Activity,B是SingleInstance启动模式,AC是默认的,也就是标准启动模式,那么A启动B,B启动C,再按返回键,它们的生命周期是怎样的?

代码测试下。A 里面放一个按钮,跳转B,B里面放一个按钮,跳转C。然后按返回键。具体代码就不贴了,很简单的。不要忘记了ActivityB要设置启动模式为SingleInstance,如下:

        <activity
            android:name=".SingleInstanceActivityB"
            android:launchMode="singleInstance"
            android:exported="false" />

我们看下logcat的日志输出:
Activity启动模式_第1张图片

结论:按返回键,C直接返回到了A,再按返回键,A返回到B。

这个不难理解,原因是启动模式SingleInstance会新建一个返回栈,这个返回栈里面只有这一个Activity。所以AC在一个返回栈,B在一个新的返回栈。所以C出栈后,就显示的是A。

如果按返回键想回到B,怎么办了?
可以重写onBackPressed()方法,finish C,然后startActivity()再启动B,这样按返回键就跳转到B。

官网关于启动模式是怎么说的?

developer.android.com

问题:ABCD四个Activity,如果B是singleTask的启动模式,其余默认,ABCD依次启动,D再启动B,生命周期是怎么样的?

Activity启动模式_第2张图片

结论:C先执行onDestroy,然后D执行onPause,然后B onNewIntent, onStart,onResume,最后D onstop,onDestroy。所以说明singleTask模式,确实会把栈中位于该Activity上面的其他Activity都移除。

关于任务和返回栈,我们后面再分析。

你可能感兴趣的:(Activity,android,java,开发语言)