@
Laeoo 关于 Android 多任务界面的划除交互,这里作一个统一答疑。(长文预警)
Q:那应该如何杀死一个应用?
A:应用是人类面对数字世界的可交互程序形成的一个想象实体,不同于可被生理终结的生物体,想象的实体只能被忘却。
(正经回答:首先得明确要杀死的主体,到底是进程、上下文状态,还是背后的开发者?其次,杀只是手段,而不是真实需求,需要好好想想为什么要杀应用)
Q:那么多任务界面划掉任务在 AOSP 上到底代表什么?
A:多任务界面掌管的是「任务」这个维度。Android 中的任务是一个类似于真实世界中任务的抽象概念,它代表的是一组有导航先后关系的界面所处的上下文,与应用的进程和可运行状态都没有必然的对应关系。这么说很抽象,下面具体拆解来看。
首先,一个任务可以包含来自多个应用的界面(比如从淘宝跳转到支付宝),所以划掉任务到底应该杀掉支付宝还是淘宝呢?或是通杀?
其次,一个应用可以创建多个任务,比如文档编辑器可以分别从不同的任务中被别的应用打开,各自处于不同的上下文(编辑的文档)。划掉其中一个任务就要杀死文档编辑器么?
最后,即便应用的进程因别的原因回收了(比如内存不足),任务所包含的应用界面上下文依然保留在内存中。再次切回到该任务时,会触发 Android 的界面上下文恢复机制,只要应用正确支持了这个机制,就可以回到之前离开时的精确上下文,看起来就像是应用从未被杀死过。这个恢复机制甚至可跨越设备重启。
Q:我就是不想要应用在后台占内存耗电,要怎么做?
A:Android 从 8.0 开始大幅度调整了应用的后台控制策略,具体技术细节这里就不展开说了。原则上,只要适配了 Android 8+ 的应用,就不能再持续在后台占据内存。去年已经推动国内的应用市场跟进了 Google Play 的应用适配强制要求,所以这方面就不必担心了。至于耗电,这是一个需要平衡的取舍,你如果的确需要某个应用的后台机制,那就得让它略微耗一点电(不能既要马儿跑得快,又让马儿不吃草吧)。如果你压根不需要它的后台机制,或者它的后台耗电太过分了,那么你可以在应用设置中限制应用的后台能力(非原生系统可能不一定有这个选项)。总之,你并不需要「杀应用」,也没必要为这些破事儿操碎心。当然,道与魔的较量总会间歇有漏洞被利用,所以绿色守护一直在试图补位 Android 本身的破缺,等待它可以全身而退的那一天。