Loading... > 今天无意间发现支付宝一个APP可以有多个后台任务,类似于下面这种情况  #### 它是如何做到的呢? 1. 每个 Activity 运行时都有一个其归属的 task栈,我们可以用 activity.getTaskId() 的方法得到当前 activity 的taskId。如果两个 activity 的 taskId 不同,则他们肯定不会属于同一个 task。 2. 下面就是今天的重要属性 <b>taskaffinity </b> ```xml <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。 3. taskAffinity 单独使用并不会生效。 要想其生效,需要配合其他属性使用,或者配合 Intent.FLAG_ACTIVITY_NEW_TASK,或者配合 allowTaskReparenting 。使用时用其中的一个就行。 例如上面的代码中我们就是直接使用launchMode = singleTask。同时,taskaffinity的命名也是有要求的,必须有"."或者以"."开头,类似这样".DeliveryRecord"或者"com.DeliveryRecord",单纯的使用"DeliveryRecord"会报错 ``` The application could not be installed: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED ``` 最后我们就能得到想要的结果了。  最后修改:2021 年 07 月 22 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏