Android Activity启动模式

前言

在Android原生开发过程中,打开一个Activity是基本的操作。Android也为打开一个新的Activity设计了四种启动模式(standard、singeTop、singleTask、singleInstance),那么这四种模式具体的作用是什么,以及各自的使用场景是什么呢?

在开始之前先了解一下,如下图:

栈是一个先入后出(FILO-First In Last Out)的有序列表。

其实Android维护了对应的Activity栈,Activity的打开与关闭,即Activity进栈与出栈。

Standard模式

activity standard模式下的栈

Standard模式下,每次打开一个Activity都会new一个activity实例然后压入到栈中,执行对应Activity的生命周期方法onCreate() 、onStart() 以及onResume()。Android模式采用的就是这种启动模式。

SingleTop模式

如果接下来打开的界面仍然是ActivityB,那么在SingleTop模式下,就会先判断当前栈顶是不是ActivityB:

  1. 如果是ActivityB,则直接直接使用ActivityB,调用ActivityB的生命周期方法onPause()、onNewIntent() 以及onResume()方法;
  2. 如果栈顶不是ActivityB,则new一个ActivityB的实例压入栈中,调用ActivityB的生命周期onCreate() 、onStart() 以及onResume()方法。

应用场景:避免快速点击打开多个相同的界面,节省内存

SingleTask模式

如果接下来打开的界面仍然是ActivityA,那么在SingleTask模式下,就会先判断当前栈中是否有ActivityA:

  1. 如果有ActivityA,那么先把ActivityA上的所有activity出栈,执行ActivityA的生命周期方法onNewIntent()、onRestart()、onStart()、onResume()方法;
  2. 如果没有ActivityA,则new一个ActivityA的实例压入栈中,调用ActivityA的生命周期onCreate() 、onStart() 以及onResume()方法。

应用场景: 应用开启后仅仅有一个Activity的实例,最典型的样例就是应用中展示的主页(Home页)。

SingleInstnce模式

SingleInstance模式即单一实例模式,整个手机操作系统里面只有一个实例存在。他会运行在自己单独且独立的任务栈里面,并且任务栈里面只有他一个实例存在。

比如现在当前栈中有ActivityA,我们在A中启动ActivityB,ActivityB的启动模式是singleInstance,此时会创建一个新的任务栈,创建ActivityB实例将ActivityB放在新的任务栈中。

应用场景:Launcher、拨打电话等

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章