首页 > 技术文章 > Android Studio教程04-Task和Back stack

haochen273 2019-01-17 11:02 原文

1.Tasks and Back Stack

1.1. 当点击Back按钮返回到上一个Activity时发生了什么?

后进-先出原则

点击Back

1.2. 点击HOME按钮

当点击HOME按钮的时候,原activity停止,但是整个activity依然完整,用户返回这个task的时候,依然保持用户离开时的样子

1.3.多次点击进入Activity-Back按钮

  • Activtiy会被多次实例化--我们可以避免它

2.管理任务

  • 一般情况下任务都遵循后进-先出的原则,无特殊情况不需要去更改它

  • 但是有时候可能遇到下面的情况:

    • 希望在现Activity中启动新的Task(从当前app跳到另外一个app)
    • 不希望activity被多次实例化
    • 明确back stack的activity
  • 怎么做?

    • AndroidManifest.xml中的<activity>添加属性
      • taskAffinity
      • launchMode
      • allowTaskReparenting
      • clearTaskOnLaunch
      • alwaysRetainTaskState
      • finishOnTaskLaunch
    • startActivity()之前的Intent中添加参数
      • FLAG_ACTIVITY_NEW_TASK
      • FLAG_ACTIVITY_CLEAR_TOP
      • FLAG_ACTIVITY_SINGLE_TOP

    2.1. 定义启动模式

    定义新的Activity与当前的Task如何关联

    (1).method1: 在mainifest中声明

属性 模式 含义
`launchMode` `standard(default)` activity可以创建多次,每个task可以含有多个实例(A-B-C: A-B-C-C)
`singleTop` 当activity在top时,不会创建新实例(A-B-C: A-B-C)(A-B-C: A-B-C-B)
`singleTask` 创建新的Task和实例化activity,但是如果activity之前已经存在,不会实例化
`singleInstance` 上同

(2).method2: 在Intent flag中声明

flas 含义 与method1匹配
FLAG_ACTIVITY_NEW_TASK 在新的Task中开启Activit,如果这个task已经存在,直接将他调用到前端 singleTask
FLAG_ACTIVITY_SINGLE_TOP 如果在当前activity中再次开启当前activity,直接调用onNewIntent()方法,不会创建新实例 singleTop
FLAG_ACTIVITY_CLEAR_TOP 如果将要开启的actiivty存在于当前task中,直接销毁task中该activity之前的所有activity
然后调用onNewIntent()方法,不会创建新实例
----

推荐阅读