Activity Launch Mode
launcherMode
Activity如何被启动呢?Intent对象中与Activity启动相关的标志(FLAG_ACTIVITY_*)有四个。它们分别是:
"standard" "singleTop" "singleTask" "singleInstance"
默认的启动模式是“standard”
四个模式主要分成两组:第一组是 "standard" 和"singleTop" ,"singleTask" 和"singleInstance"是另外一组。Activity以 "standard" 和"singleTop" 这两种模式启动时,可以被实例化多次。其实例可以属于任何Task中,并且可以位于Task的任意位置。通常情况下,它们通过调用startActivity()启动加入到Task中,除非Intent对象中包含了“FLAG_ACTIVITY_NEW_TASK ”的flag,在这种情况下它将进入到不同的Task中。
相比之下, "singleTask" 和"singleInstance"模式启动的Activity只能开始另一个Task,并且它们总是属于这个Task的Root Activity。此外,设备在一段时间内只维持一个该Activity的实例。只有一个这样的Task。
"standard" 和"singleTop"之间只有一个地方不同:对于"standard"模式的Activity,每次有一个Intent启动时,都会生成新的Activity实例,而对于"singleTop"模式启动的Activity来说,如果Activity实例在目标Task的顶部,该Activity被Intent启动时不会产生新的实例(会调用oneNewIntent()),其它情况下,如果Activity在目标Task中但是不在目标Task的顶部 或是 Activity在一个Task的顶部,但是不在目标Task中。它仍会创建一个新实例,进入到目标Task的顶部。
"singleTask" 和"singleInstance"之间也是只有一个地方不同:以 "singleTask"模式开始的Activity,允许其它的Activity加入到它所到的Task,它始终是这个Task的Root Activity,其它能进入到这个Task的Activity的启动模式一定是 "singleTask" 和"singleInstance"这两种模式。"singleInstance"启动的Activity也会开始一个Task,但是它不允话其它的Activity进入到它所在的Task,它是此Task的唯一的Activity同样也是Root Activity。
1.standard
默认启动方式。系统总是在目标Task中创建一个新的Activity实例。
2.singleTop
如果在目标Task的顶部已存在Activity实例,系统将通过该实例调用onNewIntent()方法,而不创建新的Activity实例。
3.singleTask
系统创建新的Activity实例,开启新的Task,并将Activity的实例做为新Task的根Activity。但是如果Activity的实例已经存在,系统会通过该实例调用onNewIntent()方法,而不是创建一个新的实例。
4.singleInstance
同“singleTask”一样,但是系统不会将其它Activity的实例放入到拥有该Activity实例的Task,该Activity实例将独占一个Task
Activity Launch Mode的更多相关文章
- Android模拟器出现emulator-5554 disconnected! Cancelling activity launch !的解决办法
关于 emulator-5554 disconnected! Cancelling 'xxx activity launch'!的问题,解决方法: d: cd D:/Program Files/and ...
- Android Activity学习笔记(一)
Activity为Android应用的四大组件之一,提供界面来与用户完成交互等操作.其中Activity的生命周期的知识这里做个笔记. Activity的生命周期由以下几个部分组成: 1.onCrea ...
- android程序报错“error launching activity com.android.ddmlib.shellcommandunresponsiveexception”的解决方式
今天在调试android程序的时候,因为是NDK开发,要先编译.so库再打包下载到android模拟器,所以花费的时间比較长.控制台就会报例如以下错误: error launching activit ...
- 通过命令启动一个activity(am pm 命令)
一.am的含义是activityManager 主要作用是启动activity.service .broadcast 1.通过adb命令启动acitvity,首先需要设置activity 的 e ...
- Android Activity启动耗时统计方案
作者:林基宗 Activity的启动速度是很多开发者关心的问题,当页面跳转耗时过长时,App就会给人一种非常笨重的感觉.在遇到某个页面启动过慢的时候,开发的第一直觉一般是onCreate执行速度太慢了 ...
- Android之Activity启动流程详解(基于api28)
前言 Activity作为Android四大组件之一,他的启动绝对没有那么简单.这里涉及到了系统服务进程,启动过程细节很多,这里我只展示主体流程.activity的启动流程随着版本的更替,代码细节一直 ...
- ATMS中去拉起新的进程,并在新进程启动后调用attachApplication时,resume待启动的Activity
相关文章: ATMS中去pause Activity A. 目录 ATMS拉起新进程 堆栈 resumeTopActivityInnerLocked:1684, ActivityStack start ...
- Android Log Tag含义
在分析Android问题的时候重要的手段之一就是分析log,在events.log中有很多系统log,其中有些log的含义并不是很了解,下面就是从安卓源码中得到的系统log的tag. 关于Tag的说明 ...
- ADB am 命令详细参数
usage: am [subcommand] [options] usage: am start [-D] [-W] [-P <FILE>] [--start-profiler <F ...
随机推荐
- 关于在Eclipse中使用正则表达式替换的一点记录(使用正则表达式的分组)
今天在工作中遇到了点替换的麻烦事,由于数据类进行了变动,具体情况是这样的,需要将下面的代码: player.skillData[i].name 替换为: player.skillData.getSki ...
- Elasticsearch简单介绍
如何对站内的数据进行检索? ElasticSearch是比较著名的一个分布式检索解决方案.传统的数据库例如mysql,oracle等,对一个关键词进行检索通常都是采用like的匹配,对性能或者数据量的 ...
- MEF 编程指南(九):部件生命周期
理解 MEF 容器部件生命周期和实现是非常重要的事情.考虑到 MEF 关注可扩展应用程序.这变得尤为重要.生命期可以解释为期望部件的共享性(transitively, its exports) 共 ...
- python写的多线程下载工具
其实只是想练习一下threading的用法. 写完后发现其实下载速度也没增加多少,略显尴尬,汗 # -*- coding: cp936 -*- import urllib2 import thread ...
- mmc生产运输问题
本题目结合生产和运输,增加了约束, 其实,比较生产,运输问题,大同小异, 解法基本相同.
- Python Generators(生成器)--yield
参考:http://blog.csdn.net/scelong/article/details/6969276 Python生成器 什么是python生成器,意思是带有一个yield语句的函数,既然它 ...
- Mac电脑没有声音,苹果电脑没有声音怎么办
对于使用 Windows 系统电脑的小伙伴来说,可能有很多人会遇到电脑没有声音的问题.苹果 Mac 电脑也会出现没有声音的问题,不过相对较少.这里以我遇到的一个没有声音的问题为例,简单介绍处解决的 ...
- php对象当参数传递 && php深复制和浅复制
把对象当参数传递给方法,在方法里改过对象后,影响到外面的对象 因为对象是引用传递过去的 class Book { public $name; public function __construct( ...
- if条件
-e filename 如果 filename存在,则为真-d filename 如果 filename为目录,则为真 -f filename 如果 filename为常规文件,则为真-L filen ...
- Npoi 导出Excel 下拉列表异常: String literals in formulas can't be bigger than 255 Chars ASCII
代码: public static void dropDownList(string[] datas, string filePath) { HSSFWorkbook workbook = new H ...