Hi!请登陆

Android 14也加强杀后台 避免某些应用检测到被杀后自动重启

2023-11-15 92 11/15

国内 OEM 对于后台进程的管控极其严格,杀后台主要原因还是要给用户一种流畅、省电的体验,但似乎有些过于严格了,以至于不少应用本身需要长期在后台运行结果也会在某些时候不停地被杀掉。

而在国外,使用 Android 14 原生版的话,这种杀后台就比较微妙了,因为谷歌管控的并不是那么严格,所以有些应用采用投机取巧的方式,在用户将其关闭时,又悄悄自动重启,从而继续在后台驻留。

于是现在谷歌也准备加强后台进程的管控,主要是对那些采用不正当手段进行自动重启的应用,这个出发点与国内 OEM 不同。

Android 14 通过 Linux 内核功能避免应用自动重启:

开发者 @oasisfent 发现,Android 现在会在杀掉进程前先冻结该进程所属的 cgroup 控制组群,控制组是 Linux Kernel 的一项核心功能,用来限制、控制、分离一个进程组的资源,这是谷歌工程师在 2006 年发起的功能,最早的名称叫进程容器。

在 Android 14 之前,应用程序能够通过在不同服务下分叉多个进程并监视其中的进程运行状态,当监视到某个子进程被杀掉时,剩余的进程会重新启动正在终止或已经终止的服务实现重新启动。

Android 14 则是通过控制组群在杀掉进程之前,冻结这个应用程序的所有进程,也就是说一旦执行杀进程,那么这个组内的所有进程都会被杀掉。

为了防止同步 Binder 调用导致的无限阻塞,在冻结组之前,进程的 Binder 接口也会被一起冻结。

当组内所有进程被杀掉后,控制组群才会被解冻,此时当用户点击应用程序时,相关的进程可以重新启动。

MarsDaemon 库:

MarsDaemon 是一个开源库,它本身并不是恶意的,但被很多应用程序利用拿来进行常驻,如果你在国内搜索引擎上查找这个关键词,可以发现不少标题带有「常驻」的文章。

这个库也已经很久没更新了,国内 OEM 基本都对利用 MarsDaemon 进行常驻的手法免疫了,毕竟要给用户所谓的流畅和省电,那就得想方设法杀进程,即便这可能影响用户的实际体验。

Android 14 现在也终于跟进了国内 OEM 的做法,至少要先把 MarsDaemon 的手法给堵了,利用 cgroup 进行冻结也确实是个不错的办法,这应该有助于打击 Google Play 中那些试图常驻的应用。

相关推荐