深入Activity,Activity启动模式LaunchMode完全解析

转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53221384

本文出自【DylanAndroid的博客】


深入Activity,Activity启动模式LaunchMode完全解析

在平时的开发中,我们可能会了解到Activity的任务栈还有Activity的启动模式。那么Activity的启动模式都分别是怎么样的呢?如果设置了这些启动模式对任务栈有事么影响

,还有就是这么启动模式在实际的开发中有什么应用呢?这里用图例和demo来分析一下Activity的启动模式。

Demo图

1.Standard:标准启动模式

Activity的默认模式,所有的Activity元素遵循先进后出的进栈出栈的特性,这种的比较简单

启动顺序:A->B->C

回退顺序:C->B->A.

2.SingleTop:栈顶复用模式

栈顶复用模式,如果想要打开的activity在任务栈的栈顶已经存在,就不会创重新建新的实例,而是调用该Activity的 onNewIntent() 方法。避免栈顶的activity被重复的创建。

例如A.B启动模式为Standard,C启动模式为SingleTop

启动顺序:A->B->C—>C

回退顺序:C->B->A.而不是C->C->B->A

应用如下:

* 点击通知栏重复打开Activity的问题

全新的Android通知栏,已抛弃setLatestEventInfo,兼容高版本 这篇文章里面

我们打开一个通知栏,点击通知栏默认打开MainActivity,有一个问题,就是如果不设置MainActivity的launchMode,就会每次点击通知栏的时候会重新打开一个Activity。

我们可以将MainActivity的启动模式设置为SingleInstance,就不会再重新打开MainActivity,而是调用MainActivity的onNewIntent() 方法。

* 可以解决按钮重复点击的问题(当然这种启动模式不是为了去解决这个问题在这里这是说为了用这么应用去说明SingleTop启动模式)。

3.SingleTask:栈内复用模式

如果想要启动的Activity在当前栈内启动之后,该activity只会在任务栈里面存在一个实例。如果要再次打开这个activity,在任务栈里面如果已经存在,就不会创建新的activity,

而是复用栈内的这个已经存在的activity,调用改Activity的 onNewIntent() 方法,并且清空这个activity任务栈上面所有的activity。

例如A.C.D启动模式为Standard,B启动模式为SingleTask

启动顺序:A->B->C—>D—>B

回退顺序:B->A.而不是B—>D->C->B->A

应用如下:如果从主页去登录,然后去注册,注册完成如果直接回去主页,可以将主页的launchMode设置为SingleTask。直接从注册跳到主页即可,不用去关心LoginActivity是否关闭,还是什么时候关闭。

4.SingleInstance:单一实例模式

在整个Android系统中(可能会有很多任务栈)里面只有一个实例存在。不同的应用程序app去启动这个activity,就会共享公用同一个activity。

他会运行在自己单独的的任务栈里面,并且这个单独的任务栈里面只会存在着一个实例。而且这个单独的任务栈会在最底层。

应用场景:系统的发短信,打电话,来电,浏览器等。这种模式在平时很少去使用,一般在Launcher中可能会用到。

例如A.C启动模式为Standard,B启动模式为SingleInstance

启动顺序:A->B->C;注意:此时产生了两个任务栈,B产生了一个新的任务栈,并处于其他任务栈的下面。

回退顺序:C->A->B.而不是C->B->A

5.GitHub

时间: 2024-10-20 19:41:55

深入Activity,Activity启动模式LaunchMode完全解析的相关文章

全面解析Activity启动模式(LaunchMode)

欢迎Follow我的GitHub, 关注我的CSDN. 在Android应用中, Activity是最核心的组件, 如何生成一个Activity实例, 可以选择不同的启动模式, 即LaunchMode. 启动模式主要包括: standard, singleTop, singleTask, singleInstance. 标准模式在每次启动时, 都会创建实例; 三种单例模式, 会根据情况选择创建还是复用实例. 在Activity启动中, 创建实例的生命周期: onCreate -> onStart

Activity的启动模式全解

在android中控制Activity的启动模式的属性主要控制两大功能: 1,控制activity 进入哪一个任务task 中,   有三种可能,进入老任务task中,进入指定taskAffinity的task中,进入新task中 2,控制activity 多次启动的处理模式,       有三种可能,每次都创建新的,如果在顶部不创建新的,  如果存在则清除之上所有的activity Activity的启动模式中多次启动的处理模式要先确定activity进入的task 在<activity>元

Activity启动模式(launchMode)详解

Activity 的启动模式有四种,standard.singleTop.singleTask.singleInstance. image.png 1.standard standard是Activity默认的启动模式,在不进行显示指定的情况下,所有活动都会自动使用这种启动模式. 每次启动都一个新的Activity位于栈顶. android:launchMode="standard",此时每次点击按钮都会创建新的Activity 现在,我们写一个简单的按钮 ,实现跳转Activity

【Android基础】Activity的启动模式(android:launchMode)

在android里,有4种activity的启动模式,分别为: "standard" (默认) "singleTop" "singleTask" "singleInstance" 它们主要有如下不同: 1. 如何决定所属task "standard"和"singleTop"的activity的目标task,和收到的Intent的发送者在同一个task内,除非intent包括参数FLAG_

Activity的启动模式 4种launchMode Intent.FLAG_NEW_TASK 详解

参考:http://blog.csdn.net/liuhe688/article/details/6754323 了解android开发的同学都知道 android开发 主要内容就是四大组件:Activity. BroadCastReceiver.Service.ContentProvider 而Activity又是重中之重  所以了解Activity的生命周期,启动模式等对我们来说是非常有必要的 .本文主要讲讲Activity的启动模式及其相关概念. Activity的启动模式主要四种,sta

Activity启动模式launchMode

今天要讲得是Activity的四种启动模式launchMode属性,该属性用于配置该Activity的加载模式,该属性支持以下4个属性值. standard:标准模式,也是默认模式. singletop:Task栈顶单例模式. singleTask:Task内单例模式. singlestance:全局单例模式. 在继续写下去之前我想说一下,像launchMode这种基础的Android知识在网上已经有很多大神写得十分详细,为什么我还要写呢?我之所以写,是因为我确确实实是个菜鸟,将课本.网上大神的

Activity的启动模式

Activity的四种启动模式: 在AndroidManifest.xml中给Activity进行配置,配置代码: android:launchMode="" 四种模式:Standard.singleTop.SingleTask.singleInstance 模式一 standard模式:没有在AndroidManifest.xml文件中配置,或者配置为android:launchModel="standard". 当启动一个Activity activity的时候

任务栈 Activity的启动模式 Intent中的Flag taskAffinity

关于任务栈Task 栈的概念 栈(Stack)是一种常用的数据结构,栈只允许访问栈顶的元素,栈就像一个杯子,每次都只能取杯子顶上的东西,而对于栈就只能每次访问它的栈顶元素,从而可以达到保护栈顶元素以下的其他元素."先进后出"或"后进先出"就是栈的一大特点,先进入栈的元素总是要等到后进入栈的元素出栈以后才能出栈.递归就是利用到了系统栈,暂时保存临时结果,对临时结果进行保护. 栈的基本操作:压栈.弹栈 任务栈 Task简单的就是一组以栈的模式聚集在一起的Activity

Activity的启动模式---总结

Activity有四种启动模式: 1.standard(标准)    2.singleTop    3.singleTask  4.singleInstance 标识某个Activity的启动模式,有两种方式: 1.一种是通过AndroidManifest.xml    2.一种是通过Intent的标识 通过AndroidManifest.xml来标识: <activity android:name=".Activity1" android:launchMode="st