Android Task的应用

在Android应用中,默认是只有一个Task的,而为了方便应用的管理,我们也可以手动的让多个Activity分别依附于多个Task中。

Task添加

让Activity运行于另一个Activity需要两步设置:Intent的Flag;manifest的taskAffinity。

Intent-Flag

这一点就很明显了,有个FLAG_ACTIVITY_NEW_TASK选项,顾名思义启动Activity在新的Task,而这个‘新的’Task并非是指新创建一个Task,如果对目标Activity所指定的Task不存在则会创建新的Task并在其内运行,否则直接将Activity运行于其内。

manifest-taskAffinity

Activity的属性,指定Activity所在的Task,默认值为应用包名。如其值设置为‘:xxx’,实际表示‘包名:xxx’。


实际上按需使用launchMode的singleInstance也可以让Activity启动于另一个Task,该标记下必须创建一个新的Task,且该Task中只能存在该Activity一个实例。


Task管理

Task的管理需要用到ActivityManager(其内操作实际上是远程调用ActivityManagerService,所以不要指望手动去调ActivityManagerService会有更大的效果了。)

获取Task

ActivityManager.getAppTasks()
获取当前应用下所有Task,包括里面没有Activity的Task,包括未分配id的Task。即使某些Task还未正式创建,此处也是可以获取到的,其id默认为-1。

移动Task

ActivityManager.moveTaskToFront()
将指定id的Task放到前台。事实上此方法并不建议使用,该方法并不能保证目标Task中包含的Activity正在运行。

替代的,可以在得到一个TaskIfno后,使用它的baseIntent来启动Activity(startActivity(AcvtivityManager.getAppTasks().get(i).getTaskInfo().baseIntent))。此种方式若目标Task包含Activity在运行中,则会直接将所处Task移动到前台,否则使用该Intent启动Activity。

你可能感兴趣的:(android)