杀不掉的知乎 - 聊一聊 Android 的多任务,最新Android高级面试题汇总

77 阅读4分钟

对于普通用户,也还是有办法的。进入系统设置,在应用设置里找到知乎,点击强行停止:

但无论是哪种方法,都是比较麻烦的,真心希望大家不要这样搞。

excludeFromRecents

=============================================================================

其实,Android 是允许我们在任务列表里隐藏的,而且很简单,只要在清单中声明了android:excludeFromRecents=“true” 就好了。

我们新建一个项目试一下,把 MainActivity 加上这个配置:

<activity

android:name=".MainActivity"

android:excludeFromRecents="true">

这样就能达到不在任务列表显示的效果。

但仅仅如此还达不到知乎的效果,因为首次打开它是有在任务列表显示的。下面引入多任务的另一个概念。

taskAffinity

=======================================================================

之所以叫任务列表,是因为这里显示的是当前在执行的任务,而不是当前运行的应用。只不过在默认情况下,一个应用就对应一个任务。

每个任务会有一个 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 详细知识点思维脑图(技能树)】

image

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。

这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

由于篇幅有限,这里以图片的形式给大家展示一小部分。

详细整理在GitHub:Android架构视频+BAT面试专题PDF+学习笔记​

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。