android Activity launch mode 知识点总结

阅读

http://my.oschina.net/u/1244156/blog/228483

FLAG_ACTIVITY_NEW_TASK

会启动被调用者TaskAffinity(如果不定义默认就是所在的Application的包名)决定的Task栈 (即 如果 只有A,B的应用,开启应用 A带newTask启动B还是在同一Task栈中)

FLAG_ACTIVITY_CLEAR_TOP

清除Task栈中被调用者以上的Activity(包括调用者,即调用B的onDestroy,onCreate方法)

FLAG_ACTIVITY_SINGLE_TOP

如果栈顶是被调用者 则直接调用onNewIntent()方法

注:FLAG_ACTIVITY_CLEAR_TOP 并且 FLAG_ACTIVITY_SINGLE_TOP 相当于 launchMode 中的 singleTask,singleInstance 即:清除Activity以上者且调用onNewIntent方法

FLAG_ACTIVITY_BROUGHT_TO_FRONT

如果activity在task存在,拿到最顶端,不会启动新的Activity

FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET

如果一个Intent中包含此属性,则它转向的那个Activity以及在那个Activity其上的所有Activity都会在task重置时被清除出task。当我们将一个后台的task重新回到前台时,系统会在特定情况下为这个动作附带一个FLAG_ACTIVITY_RESET_TASK_IF_NEEDED标记,意味着必要时重置task,这时FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET就会生效。

注:

经过测试发现,对于一个处于后台的应用,如果在主选单点击应用,这个动作中含有FLAG_ACTIVITY_RESET_TASK_IF_NEEDED标记,长按Home键,然后点击最近记录,这个动作不含FLAG_ACTIVITY_RESET_TASK_IF_NEEDED标记,所以前者会清除,后者不会。关于这个标记,可以下图示之:

FLAG_ACTIVITY_RESET_TASK_IF_NEEDED

1.启动Activity时创建新的task来放置Activity实例;2.已存在的task被放置于前台。系统会根据affinity对指定的task进行重置操作,task会压入某些Activity实例或移除某些Activity实例。

注:从launcher中启动app

<activity>的task相关属性

1.android:allowTaskReparenting

标记一个Activity实例在当前应用退居后台后,是否能从启动它的那个task移动到有共同affinity的task,“true”表示可以移动,“false”表示它必须呆在当前应用的task中,默认值为false。

eg:例如在一个应用中要查看一个web页面,在启动系统浏览器Activity后,这个Activity实例和当前应用处于同一个task,当我们的应用退居后台之后用户再次从主选单中启动应用,此时这个Activity实例将会重新宿主到Browser应用的task内,在我们的应用中将不会再看到这个Activity实例,而如果此时启动Browser应用,就会发现,第一个界面就是我们刚才打开的web页面,证明了这个Activity实例确实是宿主到了Browser应用的task内。

2.android:alwaysRetainTaskState

这个属性用来标记应用的task是否保持原来的状态,“true”表示总是保持,“false”表示不能够保证,默认为“false”。此属性只对task的根Activity起作用,其他的Activity都会被忽略。

默认情况下,如果一个应用在后台呆的太久例如30分钟,用户从主选单再次选择该应用时,系统就会对该应用的task进行清理,除了根Activity,其他Activity都会被清除出栈,但是如果在根Activity中设置了此属性之后,用户再次启动应用时,仍然可以看到上一次操作的界面。

这个属性对于一些应用非常有用,例如Browser应用程序,有很多状态,比如打开很多的tab,用户不想丢失这些状态,使用这个属性就极为恰当。

3.android:clearTaskOnLaunch

这个属性用来标记是否从task清除除根Activity之外的所有的Activity,“true”表示清除,“false”表示不清除,默认为“false”。同样,这个属性也只对根Activity起作用,其他的Activity都会被忽略。

如果设置了这个属性为“true”,每次用户重新启动这个应用时,都只会看到根Activity,task中的其他Activity都会被清除出栈。如果我们的应用中引用到了其他应用的Activity,这些Activity设置了allowTaskReparenting属性为“true”,则它们会被重新宿主到有共同affinity的task中。

4.android:finishOnTaskLaunch

这个属性和android:allowReparenting属性相似,不同之处在于allowReparenting属性是重新宿主到有共同affinity的task中,而finishOnTaskLaunch属性是销毁实例。如果这个属性和android:allowReparenting都设定为“true”,则这个属性胜出

时间: 2024-10-12 12:54:54

android Activity launch mode 知识点总结的相关文章

android Activity launch mode 一个实例 singleInstance

参考:http://blog.csdn.net/zhangjg_blog/article/details/10923643# singleInstance的特点可以归结为以下三条: 以singleInstance模式启动的Activity具有全局唯一性,即整个系统中只会存在一个这样的实例 以singleInstance模式启动的Activity具有独占性,即它会独自占用一个任务,被他开启的任何activity都会运行在其他任务中(官方文档上的描述为,singleInstance模式的Activi

android Activity launch mode 一个实例

参考:http://blog.csdn.net/ljz2009y/article/details/26621815 一个应用 三个页面 第二个页面设置为 singlTask <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.jg.

Android Activity学习笔记(一)

Activity为Android应用的四大组件之一,提供界面来与用户完成交互等操作.其中Activity的生命周期的知识这里做个笔记. Activity的生命周期由以下几个部分组成: 1.onCreate :Activity Launch时调用,完成布局和资源的设置操作. 2.onStart :Activity开始可见,但是与用户之间不能交互(下面有例子说明). 3.onResume :Activity可见,并且此时可以与用户完成交互操作. 4.onPause :Activity将不可见或则有其

我的Android进阶之旅------&gt;Android Activity的singleTask加载模式和onActivityResult方法之间的冲突

今天调试一个bug的时候,情景如下: 一个Activity A,需要用startActivityForResult方法开启Activity B.Activity B的launch mode被设置为singleTask,那么在Activity B开启之后的瞬间(未等B返回任何result),Activity A中的onActivityResult方法就会被调用,并且收到一个RESULT_CANCEL的request code. 然后在ActivityB中做了一些逻辑之后,在Activity B通过

Android——锁定launch - 原生Browser启动 -引导provision

前段时间做了一个功能,就是锁定主launch,机器上只能跑我们定义的launch,当时没注意影响, 最近发现就是因为在AMS中加了这个锁定过滤条件导致原生Browser无法启动了, 把我郁闷的,当时怎么想都觉得奇怪,这完全不相关的两件事怎么会影响到- 这里记录一下 撰写不易,转载请注明出处:http://blog.csdn.net/jscese/article/details/41015941 锁定主launch 启动android系统launch的过程原理可参考Android--启动过程详解中

[转]Android Activity的加载模式和onActivityResult方法之间的冲突

前言 今天在调试程序时,发现在某一Activity上点击返回键会调用该Activity的onActivityResult()方法.我一开始用log,后来用断点跟踪调试半天,还是百思不得其解.因为之前其他的Activity的LaunchMode都是Normal,没有特殊设定,这个Activity由于需求改成了singleTop.直到我确定没有一个地方是代码主动触发的,我才想到了跟Activity的LaunchMode是否有关. 探索 在Google上搜索android activity onact

android——activity与view

1.       activity, view概述 进行android开发,只需具有java语言基础即可.入门的开发并不需要一些高深的java知识,如Swing,网络,线程,数据库等. 刚开始进行android开发,会觉得android的架构设计得很好,接口简单,模块独立.特别是像我这种C++程序员来说,没有了框架自动添加的很多消息映射宏,窗口的启动,过多复杂的类等.如android应用程序的基本构成就采用MVC模式,界面与逻辑开发独立,程序员可以只专注于程序逻辑开发,美工可以专注于界面设计.

Android——Activity中的六个主要函数

Android Activity中的六个主要函数 Android中一个Activity一般都需要实现六个函数: onCreate(), onStart(), onResume(),onPause(),onStop(),onDestroy(). onCreate函数:注册你要用到的变量,比如说service,receiver,这些变量是无论你的Activity是在前台还是在后台都能够被响应到的,然后调用上面那个用来初始化的函数初始化布局信息. onStart函数:注册一些变量.这些变量必须在And

[转]Android Activity和Fragment的转场动画

Android Activity和Fragment的转场动画 Activity转场动画 Activity的转场动画是通过overridePendingTransition(int enterAnim, int exitAnim)实现的. 这个方法是API Level 5 加入的. 这个方法在startActivity(Intent) or finish()之后被调用,指定接下来的这个转场动画. 方法的第一个参数:enterAnim,是新的Activity的进入动画的resource ID: 第二