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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ActivityTaskManager.getTasks 方法已经过时,不建议使用。取而代之的是使用 ActivityManager.getRunningTasks 方法来获取正在运行的任务列表。 以下是使用 ActivityManager.getRunningTasks 方法获取任务列表的示例代码: ```java import android.app.ActivityManager; import android.content.Context; import android.os.Build; public class MyApp { public static void main(String[] args) { Context context = /* 获取上下文 */; ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // 获取任务列表(API Level 21及以上) ActivityManager.AppTask task = activityManager.getAppTasks().get(0); // 使用 task 进行操作 // ... } else { // 获取任务列表(API Level 20及以下) ActivityManager.RunningTaskInfo taskInfo = activityManager.getRunningTasks(1).get(0); // 使用 taskInfo 进行操作 // ... } } } ``` 在上面的代码中,我们首先获取了一个上下文对象,然后使用该上下文对象获取了 ActivityManager 对象。根据不同的 Android 版本,我们使用不同的方法来获取任务列表。在 API Level 21 及以上版本中,可以使用 getAppTasks 方法来获取任务列表,并使用 AppTask 对象进行操作。在 API Level 20 及以下版本中,可以使用 getRunningTasks 方法来获取任务列表,并使用 RunningTaskInfo 对象进行操作。 请注意,从 Android 5.0(API Level 21)开始,Google 引入了任务锁定功能,并限制了对任务列表的访问。因此,在较新的 Android 版本中,获取任务列表的能力可能会受到限制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值