Android Task的应用

本文介绍了如何在Android应用中通过Intent Flag与manifest配置实现多个Activity跨Task运行,并提供了ActivityManager的使用方法,以便进行Task的获取与移动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值