<activity
android:name=“.MainActivity”
android:excludeFromRecents=“true”>
这样就能达到不在任务列表显示的效果。
但仅仅如此还达不到知乎的效果,因为首次打开它是有在任务列表显示的。下面引入多任务的另一个概念。
=======================================================================
之所以叫任务列表,是因为这里显示的是当前在执行的任务,而不是当前运行的应用。只不过在默认情况下,一个应用就对应一个任务。
每个任务会有一个 TaskAffinity,可以把它理解为任务名,默认情况下 TaskAffinity 是应用的包名。我们可以用 taskAffinity 属性给 Activity 配置不同的任务名,让一个 APP 拥有多个任务。
无论是 excludeFromRecents 还是 taskAffinity,它们只对栈内的根 Activity 生效,其实它们作用的是任务栈 Task,而不是 Activity。
举个例子,我们增加一个 SecondActivity,清单配置如下:
<activity
android:name=“.MainActivity”
android:label=“Task 1”
android:taskAffinity=“com.nanbox.task1”>
<activity
android:name=“.SecondActivity”
android:label=“Task 2”
android:launchMode=“singleTask”
android:taskAffinity=“com.nanbox.task2” />
当两个 Activity 都开启后,任务列表就会出现两个任务。
taskAffinity 经常会和 singleTask 搭配使用,当启动一个 singleTask 的 Activity 时,系统会先比对当前的和新的 taskAffinity,如果不一致就会在一个新的 Task 里启动 Activity。
另外,不仅一个应用可以有多个任务,不同应用也可以属于同一个任务,任务是可以跨进程的。这种使用场景应该比较少,这里就不展开讲了。
==============================================================
基于上面的多任务,假如我们一个应用有两个任务,一个可见一个不可见,用户只能在任务列表里杀掉可见的任务,不可见的任务还可以继续跑,那岂不是可以一定程度上保活?
我们来试一下,还是上面的代码,不过这次让 Task 2 在任务列表中不可见:
<activity
android:name=“.MainActivity”
android:label=“Task 1”
android:taskAffinity=“com.nanbox.task1”>
<activity
android:name=“.SecondActivity”
android:excludeFromRecents=“true”
android:label=“Task 2”
android:launchMode=“singleTask”
android:taskAffinity=“com.nanbox.task2” />
我们把启动过的 SecondActivity 存起来,在 MainActivity 中判断,如果 SecondActivity 已经存在就直接启动它,以便恢复到应用上一次的状态:
Activity activity = ActivityProvider.getActivity();
if (activity != null) {
Intent intent = new Intent(this, activity.getClass());
startActivity(intent);
finishAndRemoveTask();
}
结尾
- 腾讯T4级别Android架构技术脑图;查漏补缺,体系化深入学习提升
- 一线互联网Android面试题含详解(初级到高级专题)
这些题目是今年群友去腾讯、百度、小米、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。并且大多数都整理了答案,熟悉这些知识点会大大增加通过前两轮技术面试的几率
有Android开发3-5年基础,希望突破瓶颈,成为架构师的小伙伴,可以关注我
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
不再深入研究,那么很难做到真正的技术提升。**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!