Task
用户为了完成某个功能而执行的一系列操作就形成了一个Activity序列,这个序列在Android应用程序中就称之为任务,它是从用户体验的角度出发,把一组相关的Activity组织在一起而抽象出来的概念。
~/Android$ adb shell dumpsys activity
如果我们想要设置了"singleTask"启动模式的Activity在新的任务中启动,就要为它设置一个独立的taskAffinity属性值。
- Launch mode
* "standard": 直接创建新实例
*"singleTop":如实例已经在栈顶,则调用onNewIntent()处理新intent。对于不同task或者同一task中不在栈顶的情况,则创建新实例
* "singleTask":为此活动创建新task,本活动位于栈底。如已经在别的任务中存在,那么intent被转向已存在的实例,不会创建新实例。
* "singleInstance":所在任务通常只有它一个成员。任何由此活动启动的其它活动都会在一个新任务中打开。
* Manifest中对activity设置的launch mode可以被intent标志重写
* FLAG_ACTIVITY_NEW_TASK: 与singleTask行为一样
* FLAG_ACTIVITY_SINGLE_TOP: 与singleTop行为一样
* FLAG_ACTIVITY_CLEAR_TOP:如活动已存在于当前任务,则销毁所有在它上面的活动,通常与FLAG_ACTIVITY_NEW_TASK联用
- Affinities
* 指出活动更倾向归属于哪个任务
* 同应用的活动缺省的拥有相同的affinity
* 不同应用的活动可共享同一affinity,同应用的活动可指定不同的affinity
* android:taskAffinity
* FLAG_ACTIVITY_NEW_TASK ? ( alrady a task with the sameaffinity ? launch to the task : launch to a new task ) : launch incurrent task
* android:allowTaskReparenting = "true"
- 清除回退栈
* 用户长期离开一个任务,系统将清除其栈,除了root activity,因为看起来用户不再想继续此任务
* 长期保存栈:alwaysRetainTaskState = true
* 重回任务强制清除: clearTaskOnLaunch = true
* 重回任务终止某activity: finishOnTaskLaunch = true
- 启动任务
* 欲将某活动设置为任务入口,应当设置intent filter: