zoukankan      html  css  js  c++  java
  • 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”,则这个属性胜出

  • 相关阅读:
    《React+Redux前端开发实战》笔记2:基于Webpack构建的Hello World案例(上)
    Micro:bit 03:剪刀石头布进阶版
    c++05:二维数组
    c++04:数组的应用:点灯问题
    c++03:质合判断
    Micro:bit第二集——温控与风扇
    c++之二:利用一维数组求最大,最小,平均值
    c++首发:软件安装&helloworld
    scratch第十二集——星图
    scratch第十一集——黄金矿工
  • 原文地址:https://www.cnblogs.com/wjw334/p/4799069.html
Copyright © 2011-2022 走看看