Android文档学习:Task

来源:互联网 发布:安庆历史气象数据查询 编辑:程序博客网 时间:2024/06/03 12:59
Task

用户为了完成某个功能而执行的一系列操作就形成了一个Activity序列,这个序列在Android应用程序中就称之为任务,它是从用户体验的角度出发,把一组相关的Activity组织在一起而抽象出来的概念。

~/Android$ adb shell dumpsys activity

如果我们想要设置了"singleTask"启动模式的Activity在新的任务中启动,就要为它设置一个独立的taskAffinity属性值。

- Launch mode
* "standard": 直接创建新实例
*"singleTop":如实例已经在栈顶,则调用onNewIntent()处理新intent。对于不同task或者同一task中不在栈顶的情况,则创建新实例
  #当intent抵达onNewIntent()之前,Back键无法退出当前活动

* "singleTask":为此活动创建新task,本活动位于栈底。如已经在别的任务中存在,那么intent被转向已存在的实例,不会创建新实例。
  # 实践证明,singleTask起效与否还看affinity的设定。
  # Browser应用
* "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
  # 保证用户可以回到此任务(Launcher icon, etc)
  # 通知之类的实体通常都采用FLAG_ACTIVITY_NEW_TASK
  
* android:allowTaskReparenting = "true"
  #一个活动将从启动它的任务被移动到与它具有相同affinity的任务,如果后者切到前台
  # For example, suppose that an activitythat reports weather conditions in selected cities is defined aspart of a travel application. It has the same affinity as otheractivities in the same application (the default applicationaffinity) and it allows re-parenting with this attribute. When oneof your activities starts the weather reporter activity, itinitially belongs to the same task as your activity. However, whenthe travel application's task comes to the foreground, the weatherreporter activity is reassigned to that task and displayed withinit.
  #对于看起来包含两个应用的APK(Contacts?),不同“应用”的activities可以赋予不同的affinity
  
- 清除回退栈
* 用户长期离开一个任务,系统将清除其栈,除了root activity,因为看起来用户不再想继续此任务
* 长期保存栈:alwaysRetainTaskState = true
* 重回任务强制清除: clearTaskOnLaunch = true
* 重回任务终止某activity: finishOnTaskLaunch = true

- 启动任务
* 欲将某活动设置为任务入口,应当设置intent filter:
  # Action:"android.intent.action.MAIN"
  # Category:"android.intent.category.LAUNCHER"
  #这样的设置使得在Laucher上为Activity显示一个图标和标签,用户可以以此重回任务。
  #因此,"singleTask"和"singleInstance"的活动必须与此设置联用,否则,用户暂时切出之后将无法重回任务。
  # 疑问:任务栈如何解释,可能显示出来吗?-实验证明,可以从任务菜单中找到
原创粉丝点击