一个APP如何显示多个后台任务

  • 1277 字

今天无意间发现支付宝一个APP可以有多个后台任务,类似于下面这种情况

它是如何做到的呢?

  1. 每个 Activity 运行时都有一个其归属的 task栈,我们可以用 activity.getTaskId() 的方法得到当前 activity 的taskId。如果两个 activity 的 taskId 不同,则他们肯定不会属于同一个 task。
  2. 下面就是今天的重要属性 taskaffinity
1
2
3
4
5
6
<activity
android:name=".app.home.TestActivity"
android:screenOrientation="portrait"
android:launchMode="singleTask"
android:taskAffinity=".DeliveryRecord"
android:windowSoftInputMode="adjustPan" />

taskaffinity 可以单独对一个 activity 使用,代表该 activity 所想归属的 task;也能对application 使用,代表该 application 内声明的所有 activity 都归属于这个task。如果 activity 组件没有声明 taskAffinity 的话,该 activity 的 taskAffinity 属性也是有默认值的。如果 application 指定了 taskAffinity 值,默认值就是 application 指定的 taskAffinity 值;如果 application 未指定的话,默认值就是 manifest 中声明的包名(package 对应的字符串).Android 手机的任务列表就是根据不同 task 弹出的,我们可以根据任务管理器有几个 item 图标,来知道我们开启了几个 task。

  1. taskAffinity 单独使用并不会生效。
    要想其生效,需要配合其他属性使用,或者配合 Intent.FLAG_ACTIVITY_NEW_TASK,或者配合
    allowTaskReparenting 。使用时用其中的一个就行。
    例如上面的代码中我们就是直接使用launchMode = singleTask。同时,taskaffinity的命名也是有要求的,必须有”.”或者以”.”开头,类似这样”.DeliveryRecord”或者”com.DeliveryRecord”,单纯的使用”DeliveryRecord”会报错
1
The application could not be installed: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

最后我们就能得到想要的结果了。

赞助喵
非常感谢您的喜欢!
赞助喵
分享这一刻
让朋友们也来瞅瞅!