深入Activity,Activity启动模式LaunchMode完全解析
转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53221384
本文出自【DylanAndroid的博客】
在平时的开发中,我们可能会了解到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

深入Activity,Activity启动模式LaunchMode完全解析的更多相关文章
- Activity的启动模式--总结
3. Activity的任务栈Task以及启动模式与Intent的Flag详解? 2,Activity次级页面和主页间来回跳转,防止重复创建Activity实例 1, activity的启动模式: / ...
- Activity的启动模式(android:launchMode)
在android里,有4种activity的启动模式,分别为: “standard” (默认) “singleTop” “singleTask” “singleInstance” 它们主要有如下不同: ...
- 关于Activity启动模式(launchMode)和intent设置测试后 发现和网上说的不符 是不是我错了 求解
看了很多关于Activity启动模式(launchMode)和intent设置intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK);发现网上说的和我测试结果 ...
- Android中Activity的启动模式(LaunchMode)和使用场景
一.为什么需要启动模式在Android开发中,我们都知道,在默认的情况下,如果我们启动的是同一个Activity的话,系统会创建多个实例并把它们一一放入任务栈中.当我们点击返回(back)键,这些Ac ...
- 转 Android中Activity的启动模式(LaunchMode)和使用场景
转载请注明出处:http://blog.csdn.net/sinat_14849739/article/details/78072401本文出自Shawpoo的专栏我的简书:简书 一.为什么需要启动模 ...
- Activity LauchMode启动模式(转载)
转载于:http://www.cnblogs.com/plokmju/p/android_ActivityLauncherMode.html 在一个Android应用中,不可避免的会包含多个Activ ...
- Activity的启动模式全解standard,singleTop,singleTask,singleInstance
在android中控制Activity的启动模式的属性主要控制两大功能: 1,控制activity 进入哪一个任务task 中, 有两种可能,进入启动task中,进入指定taskAffinity的 ...
- 关于activity的启动模式
在Android中每个界面都是一个Activity ,界面的切换实际上是对不同Activity实例化的过程.而启动模式就决定Activity启动运行方式. 1.设置方式它是在主配置文件中,Activi ...
- android Activity的启动模式
Android中Activity启动模式详解 在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启 ...
随机推荐
- JQuery------判断拥有某个class或id的div是否存在
if ($(".Btn,#Show").length > 0) { alert("存在"); } else { alert("不存在" ...
- Android项目结构 以及体系结构
学习Android平台的人一般对Android的平台的应该有点认识 其它的就不多讲了 Android项目一般由以下几个部分构成 以上是一个简单的Android项目结构目录图 1. src 主要是 源 ...
- Windows 让cmd启动的程序在后台运行
在Linux下要使程序后台运行,可通过 java -jar Client.jar & 来实现 在Windows下,则通过 start /b java -jar Client.jar 来 ...
- QT 初阶 第二章 创建对话框(查找对话框实例)
最终效果图: 该对话框由三个文件组成:finddialog.h .finddialog.cpp. main.cpp 代码+注释 /*--finddialog.h--*/ #ifndef FINDDIA ...
- Codeforces 719B Anatoly and Cockroaches(元素的交叉排列问题)
题目链接:http://codeforces.com/problemset/problem/719/B 题目大意: 有一队蟑螂用字符串表示,有黑色 ‘b’ 和红色 'r' 两种颜色,你想使这队蟑螂颜色 ...
- 安卓、swiper标准的文字滚动
溢出滚动基本原理还是relative,absolute. 核心高度 swiper-wrapper 和gun-swiper-slide 的自适应高度成为关键 <style> .gun-s ...
- IOS: 模型面数控制
你可以先试试 生成之后在虚拟机上运行一下就知道了 不过关键也看手机的好坏 場景 人物 面數的話越少越好(但要保持模型的完整) 貼圖解析度也不要太大 資料越少越好 //================ ...
- msbuild FileSysExcludeFiles
<?xml version="1.0" encoding="utf-8"?> <!-- This file is used by the pu ...
- axure新手入门教程
首先做个声明:此次教程里为了快速完成,借用了一些网上已有教程的图文,不是剽窃,只图方便.另外,因为汉化版本可能功能名称等略有差别,请自行理解. 名词解释: 线框图:一般就是指产品原型,比如:把线框图尽 ...
- 【8-18】JS学习01
Source : http://www.w3school.com.cn/html 外部的 JavaScript 也可以把脚本保存到外部文件中.外部文件通常包含被多个网页使用的代码. 外部 JavaSc ...