Android中Activity的启动模式
简介
Android中的活动启动方式分为4种:standard, singleTop, singleTask, singleInstance。可以在AndroidManifest.xml中通过给<activity>标签的android:launchMode来制定。
<activity
android:name=".SingleTopActivity"
android:launchMode="singleTop">
</activity>
standard
默认的启动方式,当启动活动时,创建并将其放在返回栈中,不管其中有没有该活动。通过adb shell dumpsys activity activities可以查看到启动两次同一个的Activity时的情形:
Running activities (most recent first):
TaskRecord{b1ddaad # A=com.wision.www.launchmode U= sz=}
Run : ActivityRecord{aa96ea u0 com.wision.www.launchmode/.StandardActivity t1516}
Run : ActivityRecord{8f9bf5c u0 com.wision.www.launchmode/.StandardActivity t1516}
Run : ActivityRecord{82afe1b u0 com.wision.www.launchmode/.MainActivity t1516}
注意:在lollipop之前,从其它应用程序启动的standard Activity会放在同一个Task中;在lollipop之后,当从其他程序启动standard的Activity时,会放在另外一个task中,方便切换回启动的activity
singleTop
如果调用的目标Activity已经位于调用者的Task的栈顶,则不创建新实例,而是使用当前的这个Activity实例,并调用这个实例的onNewIntent方法。
Running activities (most recent first):
TaskRecord{3a58686 # A=com.wision.www.launchmode U= sz=}
Run : ActivityRecord{f42de2d u0 com.wision.www.launchmode/.SingleTopActivity t1517}
Run : ActivityRecord{10c724e u0 com.wision.www.launchmode/.MainActivity t1517}
但是当该活动不在栈顶的时候并不影响继续创建:
Running activities (most recent first):
TaskRecord{1aa2156 # A=com.wision.www.launchmode U= sz=}
Run : ActivityRecord{42b1119 u0 com.wision.www.launchmode/.SingleTopActivity t1519}
Run : ActivityRecord{712c2eb u0 com.wision.www.launchmode/.StandardActivity t1519}
Run : ActivityRecord{bc6e1ad u0 com.wision.www.launchmode/.SingleTopActivity t1519}
Run : ActivityRecord{93f7493 u0 com.wision.www.launchmode/.MainActivity t1519}
注意:该模式的Activity不管怎么启动都会和启动Activity在同一个task中
singleTask
用来解决重复创建的问题的,当返回栈中存在活动的实例的时候,直接使用该活动。同时
将活动之上的所有活动统统出栈,意味着所有该活动之前入栈的活动的onDestroy都会被调用。比如,返回栈如下时启动SingleTaskActivity:
Running activities (most recent first):
TaskRecord{ # A=com.wision.www.launchmode U= sz=}
Run : ActivityRecord{a3fb857 u0 com.wision.www.launchmode/.MainActivity t1527}
Run : ActivityRecord{60170b9 u0 com.wision.www.launchmode/.SingleTaskActivity t1527}
Run : ActivityRecord{a9f9c08 u0 com.wision.www.launchmode/.MainActivity t1527}
- ::14.107 -/com.wision.www.launchmode D/MainActivity: onPause
- ::14.116 -/com.wision.www.launchmode D/SingleTaskActivity: onRestart
- ::14.117 -/com.wision.www.launchmode D/SingleTaskActivity: onStart
- ::14.117 -/com.wision.www.launchmode D/SingleTaskActivity: onResume
- ::14.117 -/com.wision.www.launchmode D/SingleTaskActivity: onPostResume
- ::14.185 -/com.wision.www.launchmode D/OpenGLRenderer: endAllStagingAnimators on 0xa0686600 (RippleDrawable) with handle 0xa0f07320
- ::14.456 -/com.wision.www.launchmode D/MainActivity: onStop
- ::14.456 -/com.wision.www.launchmode D/MainActivity: onDestroy
注意:1,针对于singleTask属性,Activity可以放在启动Activity的同一个Task中,也可以放在新创建的一个Task中,取决于是否指定了taskAffinity。
2, singleTask模式使用在只保留一个实例的Activity中,比如收件箱。使用时要注意,因为启动的过程中会毁掉其他的Activity。
singleInstance
singleInstance类似于singleTask,唯一的区别就是singleTask允许别的Activity被启动到它Task中,但是singleInstance不允许,singleInstance的Task中有且只有一个实例。当按照standard->singleInstance->standard顺序启动的时候,如果按back键退出,则直接返回到第一个standard,然后再次back才会返回到singleInstance Activity,这是因为第一个和第三个standard Activity在同一个返回栈中,只有当这个栈全部清空了才会返回到singleInstance的栈中。
参考:
Android中Activity的启动模式的更多相关文章
- 【Android学习入门】Android中activity的启动模式
启动模式简单地说就是Activity启动时的策略,在Androidmanifest.xml文件中的标签android:launchMode属性设置,在Android中Activity共有四种启动模式分 ...
- Android中Activity的启动模式(LaunchMode)和使用场景
一.为什么需要启动模式在Android开发中,我们都知道,在默认的情况下,如果我们启动的是同一个Activity的话,系统会创建多个实例并把它们一一放入任务栈中.当我们点击返回(back)键,这些Ac ...
- Android中Activity的启动模式和使用场景
一.为什么需要启动模式 在Android开发中,我们都知道,在默认的情况下,如果我们启动的是同一个Activity的话,系统会创建多个实例并把它们一一放入任务栈中.当我们点击返回(back)键,这些A ...
- 转 Android中Activity的启动模式(LaunchMode)和使用场景
转载请注明出处:http://blog.csdn.net/sinat_14849739/article/details/78072401本文出自Shawpoo的专栏我的简书:简书 一.为什么需要启动模 ...
- 【android】android中activity的启动模式
在AndroidManifest.xml中配置 <activity android:label="第二个应用" android:name=".Demo2Activi ...
- Android之Activity的启动模式
启动模式有4种,分别为:1.standard(默认) -- 标准2.singleTop -- 单顶3.singleTask -- 单任务4.singleInstance: -- 单例 -- 如果 ...
- Android中Activity启动模式详解
在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. An ...
- android Activity的启动模式
Android中Activity启动模式详解 在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启 ...
- Android开发9——Activity的启动模式
在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. 一. ...
随机推荐
- css伪类的展现
常见的伪类选择器 :link :hover :active :visited 如果为以上几个伪类赋予相同css属性名,不同的css属性值 <!DOCTYPE html> <html ...
- OC中字符串的提取与替换-四种不同方法实现
/* 1.将可变字符串 @"When I was young, I loved a girl in neighbor class."中,从 young提取到girl.替换 成@&q ...
- js : json和 cookie 的简单操作
使用 cookie,可以记录用户的最近的浏览历史 <!DOCTYPE HTML> <html lang="zh-cn"> <head> < ...
- C++备忘录
参考资料: 1. <C++编程思想(第一卷)> 知识点: ● register变量:它是一种局部变量类型.它告诉编译器尽快访问该变量.一般会把变量放在寄存器中,但不保证一定会.不能得到或计 ...
- 在ionic/cordova中使用Form模型验证(w5cValidator)
在构建ionic项目过程中,当我们创建一个类似表单提交的页面时,可能会对用户的输入内容做某些规则验证,通过后再执行提交处理. 在验证的过程中,为了提供较好的用户体验,可能希望有类似于jquery Va ...
- 常用SVN命令
SVN命令 svn co svn://10.144.156.41/branches/webroot_2015_03_03_gift 表示check远程目录到当前目录下,co命令只能check目录,如 ...
- 老王讲自制RPC框架.(一.前言与技术选型)
(#)背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构 当网站流量很小时,只 ...
- Selenium:元素等待的4种方法
1.使用Thread.sleep(),这是最笨的方法,但有时候也能用到而且很实用. 2.隐示等待,隐性等待是指当要查找元素,而这个元素没有马上出现时,告诉WebDriver查询Dom一定时间.默认值是 ...
- Oracle Deadlock / 死锁 处理
Get the directory of alert log sqlplus / as sysdba show parameters udmp SQL> show parameters dump ...
- mysql delete 使用别名 语法
今天删除数据,写了这么条sql语句, DELETE from sys_menus s WHERE s.MENU_ID in (86,87,88); 结果报错.. [Err] 1064 - You ...