[关闭]
@TryLoveCatch 2022-04-29T10:20:37.000000Z 字数 1755 阅读 576

Android知识体系之进程优先级

Android知识体系


进程优先级

在大多数情况下,每个 Android 应用都在各自的 Linux 进程中运行。当需要运行应用的一些代码时,系统会为应用创建此进程,并使其保持运行,直到不再需要它且系统需要回收其内存以供其他应用使用。

应用进程的生命周期并不由应用本身直接控制,而是由系统综合多种因素来确定的,比如系统所知道的正在运行的应用部分、这些内容对用户的重要程度,以及系统中可用的总内存量。这是 Android 非常独特的一个基本功能。

为了确定在内存不足时应该终止哪些进程,Android 会根据每个进程中运行的组件以及这些组件的状态,会对进程进行一个重要性区分。

前台进程

用户目前执行操作所需的进程。

可见进程

正在进行用户当前知晓的任务,因此终止该进程会对用户体验造成明显的负面影响。

服务进程

包含一个已使用 startService() 方法启动的 Service。虽然用户无法直接看到这些进程,但它们通常正在执行用户关心的任务(例如后台网络数据上传或下载),因此系统会始终使此类进程保持运行,除非没有足够的内存来保留所有前台和可见进程。

缓存进程

目前不需要的进程,因此,如果其他地方需要内存,系统可以根据需要自由地终止该进程。

例如用户不可见的 Activity 进程 , 如调用了 onStop 方法的 Activity 组件 , 但是没有调用 onDestroy 方法销毁的界面组件 ;

进程保活

什么是oom_adj

Android有一个oom的机制,系统会根据进程的优先级,给每个进程一个oom权重值,当系统内存不足时,系统会根据这个优先级去选择将哪些进程杀掉,以腾出空间保证更高优先级的进程能正常运行。要想让进程长期存活,提高优先级是个不二之选。这个可以在adb中,通过以下命令查看:su cat /proc/pid/oom_adj , 这个值越小,说明进程的优先级越高,越不容易被进程kill掉。

保活方案

随着Android系统日渐完善,单单通过自己拉活自己逐渐变得不可能了;
因此后面的所谓「保活」基本上是两条路:

参考

https://developer.android.google.cn/guide/components/activities/process-lifecycle
https://www.jianshu.com/p/ba486d02b637
https://www.jianshu.com/p/27f434c9ef03

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注