[Android]基础--Activity的四种启动模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ouyangshima/article/details/82352434

Activity的管理机制

Android的管理主要是通过Activity栈来进行的。当一个Activity启动时,系统根据其配置或调用的方式,将Activity压入一个特定的栈中,系统处于运行(Running or Resumed)状态。当按Back键或触发finish()方法时,Activity会从栈中被压出,进而被销毁,当有新的Activity压入栈时, 如果原Activity仍然可见,则原Activity的状态将转变为暂停(Paused)状态,如果原Activity完全被遮挡,那么其状态将转变为 停止(Stopped)。

在实际开发中,应根据特定的需求为每个Activity制定恰当的启动模式。Activityde 的启动模式有四种。分别是standard、singleTop、singleTask和singleInstance。在AndroidManifest.xml中,通过<activity>标签的android:launchMode属性可以设置启动模式。

任务栈

任务栈是用于只存放一组应用activity的集合。任务栈只存放四大组件中的activity;用户看到的界面是被放置在任务栈当中的。
Activity的管理是采用任务栈的形式。任务栈采用“后进先出”的栈结构。每按一次Back键,就有一个Activity出栈。

标准模式(standard)
每次激活Activity时(startActivity),都创建Activity实例,并放入任务栈;

栈顶复用模式(singleTop)
如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例)。

栈内复用模式(singleTask)
如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。

堆内单例(singleInstance)
整个手机操作系统里面只有一个实例存在就是内存单例;
它具备所有singleTask的特点,唯一不同的是,它是存在于另一个任务栈中,且这个任务栈只有这个实例。上面的三种模式都存在于同一个任务栈中,而这种模式则是存在于另一个任务栈中。
Activity四种启动模式常见使用场景:

  1. standard     mainfest中没有配置就默认标准模式
  2. singleTop     登录页面、WXPayEntryActivity、WXEntryActivity 、推送通知栏
  3. singleTask     程序模块逻辑入口:主页面(Fragment的containerActivity)、WebView页面、扫一扫页面
  4. singleInstance     系统Launcher、锁屏键、来电显示等系统应用

猜你喜欢

转载自blog.csdn.net/ouyangshima/article/details/82352434