LaunchMode的使用场景

来源:互联网 发布:深圳淘宝代运营诈骗 编辑:程序博客网 时间:2024/04/24 23:02
  1. Task的介绍:
    1. 具有盏结构的容器,可放置多个Activity实例。启动一个应用系统会为之创建一个task;
    2. task与task之间是相互独立的,home键到主屏,启动另一应用时之前的task会转移到后台;
  2. Task相关的知识
    1. Affinity(亲和力)
      1. 默认情况下,一个应用内的所有Activity都具有相同的affinity(来自Application中的包名),可在<mainfest>aplication节点设置:android:taskAffinity="android.task.browser"
    2. Intent几种常见的flags
      1. FLAG_ACTIVITY_NEW_TASK:将目标activity压入taskAffinity与之相同task中或创建一个新的task并将其压入(同应用的activity启动没有必要使用此标记,因为当前应用使用同一个taskAffinity)
      2. FLAG_ACTIVITY_CLEAR_TOP:
        1. 当task中存在目标activity实例并且位于栈的顶端时,创建一个新的activity,如:A -> B1 -> D ->B2,栈状态:A  ->B2
        2. 结合使用:Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP会使用已存在的实例, 如:A -> B1 -> D ->B1,栈状态:A  ->B1
      3. FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET:该activity及其上的activity都会在task重置(前提:后台的task重新回到前台时,系统特定情况下附带FLAG_ACTIVITY_RESET_TASK_IF_NEEDED,意味重置task)时被清除出task。
      4. FLAG_ACTIVITY_RESET_TASK_IF_NEEDED:生效情况:1.启动Activity时创建新的task来放置Activity实例;2.已存在的task被放置于前台。
    3. <activity>的task相关属性
      1. taskAffinity:设置taskAffinity,默认是Application中的包名
      2. launchMode
      3. allowTaskReparenting:用来标记一个Activity实例在当前应用退居后台后,是否能从启动它的那个task移动到有共同affinity的task,默认值为false:呆在当前应用的task中,true:表示可以移动。
      4. alwaysRetainTaskState:这个属性用来标记应用的task是否保持原来的状态,“true”表示总是保持,“false”表示不能够保证,默认为“false”。此属性只对task的根Activity起作用,其他的Activity都会被忽略。
      5. clearTaskOnLaunch:设置了这个属性为“true”,每次用户重新启动这个应用时,都只会看到根Activity,task中的其他Activity都会被清除出栈。
      6. finishOnTaskLaunch:类似属性allowTaskReparenting,不同处前者是销毁实例,后者是重新宿主到有共同affinity的task中,并且优先级比allowTaskReparenting高。
      7. noHistory:具有此属性标识的Activity当导航到其他Activity上时,Activity栈将不记录其自身,简单来说,当A -> B, 此时Activity栈中只含有B。
0 0