Android activity四种启动模式完全解析

Android使用“任务栈”(也称“back stack”)存放启动的各个activity。一般情况下,一个应用只有一个任务栈。特殊情况允许一个应用使用多个任务栈。典型的FILO(First In Last Out)数据结构。点击“back”键,自上至下依次出栈结束activity。

activity的四种启动模式分别如下:

  1. standard
  2. singleTop
  3. singleTask
  4. singleInstance
    通过在AndroidManifest.xml中节点设置android:launchMode=”standard”可以改变activity的启动模式,默认为standard。

查看任务栈中activity信息的命令是:adb shell dumpsys activity activities

下面进行详细介绍:

standard

默认启动模式,每次启动都创建该activity新实例并放入任务栈栈顶,而且永远不会调用Activity#onNewIntent()。依次打开ActivityA,ActivityB,ActivityC,ActivityD。

之后打开ActivityB。

singleTop

若任务栈栈顶正好是要启动的activity,则不创建新实例,只是调用Activity#onNewIntent()。否则情景和standard效果相同。设置ActivityD的android:launchMode=”singleTop”。依次打开ActivityA,ActivityB,ActivityC,ActivityD。

之后打开ActivityD。

singleTask

若任务栈中有该activity的实例,则不创建新实例,只是调用Activity#onNewIntent(),并且任务栈中该activity之上的所有实例将会被自动清除。若任务栈中没有该activity实例,效果同standard模式。设置ActivityB的android:launchMode=”singleTask”。依次打开ActivityA,ActivityB,ActivityC,ActivityD。

之后打开ActivityB。

设置过节点的taskAffinity属性

taskAffinity默认等于包名,如果设置过taskAffinity属性,则此时系统会尝试为这个activity单独创建一个任务栈。设置ActivityB的android:launchMode=”singleTask”,android:taskAffinity=”com.dyk.taskAffinity.activityB”。依次打开ActivityA,ActivityB,ActivityC,ActivityD,ActivityB。

没有设置过taskAffinity属性

此时taskAffinity属性等于包名,被启动的该activity还是使用相同的任务栈。
taskAffinity属性一般在由其他应用程序启动时设置

singleInstance

在一个新栈中创建该Activity实例,并让多个应用共享改栈中的该Activity实例。一旦改模式的Activity的实例存在于某个栈中,任何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中。 设置ActivityB的android:launchMode=”singleInstance”。依次打开ActivityA,ActivityB,ActivityC,ActivityD。

按下back键依次结束ActivityD,ActivityC,ActivityA,ActivityB。

之后打开ActivityB。

按下back键依次结束ActivityB,ActivityD,ActivityC,ActivityA。

Activity#onNewIntent()使用的奇技淫巧
onNewIntent()非常好用,Activity第一启动的时候执行onCreate()—->onStart()—->onResume()等后续生命周期函数,也就时说第一次启动Activity并不会执行到onNewIntent()。 而后面如果再有想启动Activity的时候,那就是执行onNewIntent()—->onResart()——>onStart()—–>onResume()。如果android系统由于内存不足把已存在Activity释放掉了,那么再次调用的时候会重新启动Activity即执行onCreate()—->onStart()—->onResume()等。

注:宁愿少用也不滥用启动模式,一旦因为启动模式出现错误,十分难以查找。慎用!

时间: 2024-08-29 13:33:40

Android activity四种启动模式完全解析的相关文章

Android入门之Activity四种启动模式(standard、singleTop、singleTask、singleInstance)_Android

当应用运行起来后就会开启一条线程,线程中会运行一个任务栈,当Activity实例创建后就会放入任务栈中.Activity启动模式的设置在AndroidManifest.xml文件中,通过配置Activity的属性android:launchMode=""设置. 一.启动模式介绍 启动模式简单地说就是Activity启动时的策略,在AndroidManifest.xml中的标签的android:launchMode属性设置: 启动模式有4种,分别为standard.singleTop.s

Android入门之Activity四种启动模式(standard、singleTop、singleTask、singleInstance)

当应用运行起来后就会开启一条线程,线程中会运行一个任务栈,当Activity实例创建后就会放入任务栈中.Activity启动模式的设置在AndroidManifest.xml文件中,通过配置Activity的属性android:launchMode=""设置. 一.启动模式介绍 启动模式简单地说就是Activity启动时的策略,在AndroidManifest.xml中的标签的android:launchMode属性设置: 启动模式有4种,分别为standard.singleTop.s

Activity 四种启动模式详细介绍

Activity 四种启动模式详细介绍 在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. Android总Activity的启动模式分为四种: Activity启动模式设置: <activity android:name=".MainActivity" android:launchMode="standard" /&

Android LaunchMode四种启动模式详细介绍

Android LaunchMode详解 越是做的时间越长,基础知识就忘的越干净,最近做一个项目中,发现启动的几个Activity居然重叠了,我ri--,再不回忆一下就要退出Android界了. 概念解释 Task Task叫做任务,这个简单,表示我们需要完成的事情,注意,这里我们说的是任务,是个名词,例如要发短信,那我们的任务就是发送一条短信,仅此而已,再例如教官说:"张三,你去吃屎!",ok,那张三的任务就是吃屎. Back Stack 我们常叫做回退栈,或者是任务栈,这个是什么意

Activity四种启动模式

面试的时候老是问这个,为啥问这么简单的?总结一下 standard:标准模式,默认加载模式 singleTop:Task顶单例模式 singleTask:Task内单例模式 singleInstance:全局单单例模式 详细 standard 总会为启动的Activity创建一个新的实例,并将该Activity添加到当前Task栈中,也就是层层叠加 singleTop 如果栈中已经存在该Activity实例,只要不在栈顶,都会创建实例 singleTask 同一个Task内只有一个Activit

Android Activity 的四种启动模式 lunchMode 和 Intent.setFlags();singleTask的两种启动方式。

原文:Android Activity 的四种启动模式 lunchMode 和 Intent.setFlags();singleTask的两种启动方式. Android Activity 的四种启动模式 lunchMode 和 Intent.setFlags(); 一.Android Activity 四种启动模式 lunchMode 在Manifest 配置文件中的属性如下: (1) android:launchMode="standard" (2)android:launchMod

简单介绍Android中Activity的四种启动模式_Android

在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. Activity有四种启动模式: 1. standard,默认的启动模式,只要激活Activity,就会创建一个新的实例,并放入任务栈中,这样任务栈中可能同时有一个Activity的多个实例. 2. singleTop,激活Activity时,如果栈顶是这个Activity,就不会创建新的实例:如果栈顶

Android编程中Activity的四种启动模式

本文实例讲述了Android编程中Activity的四种启动模式.分享给大家供大家参考,具体如下: Activity启动方式有四种,分别是: standard singleTop singleTask singleInstance 可以根据实际的需求为Activity设置对应的启动模式,从而可以避免创建大量重复的Activity等问题. 设置Activity的启动模式,只需要在AndroidManifest.xml里对应的<activity>标签设置android:launchMode属性,例

简单介绍Android中Activity的四种启动模式

在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. Activity有四种启动模式: 1. standard,默认的启动模式,只要激活Activity,就会创建一个新的实例,并放入任务栈中,这样任务栈中可能同时有一个Activity的多个实例. 2. singleTop,激活Activity时,如果栈顶是这个Activity,就不会创建新的实例:如果栈顶