Android系统应用程序进程类型解析
程序员文章站
2022-07-03 23:01:52
Android系统应用程序进程类型解析,Android系统试图尽可能长地保持一个应用程序进程,但是当内存低时它最终还是需要移除旧的进程。为了决定保持那个进程及杀死那个进程,andr...
Android系统应用程序进程类型解析,Android系统试图尽可能长地保持一个应用程序进程,但是当内存低时它最终还是需要移除旧的进程。为了决定保持那个进程及杀死那个进程,android将每个进程放入了一个基于运行于其中的组件的重要性等级和这些组件的状态。重要性最低的进程首先被杀死,然后是其次,以此类推。总共有5个层次级别。
1 前台进程用户当前工作所需要的。一个进程如果满足下列任何条件被认为是前台进程:
它正运行这个一个正在与用户交互的activity(Activity对象的onResume()方法已经被调用) 它寄宿了一个服务,该服务与一个与用户交互的activity绑定 它有一个Service对象执行它的生命周期回调(onCreate()、onStart()、onDestory()) 它有一个BroadcastReceiver对象执行他的onReceive()方法 2 可视进程他没有任何前台组件,但是仍然能影响用户在屏幕上看到东西。一个进程满足下面任何一个条件都被认为是可视进程
它寄宿着一个不是前台的activity,但是它对用户仍可见(onPause()方法已经被调用) 它寄宿着一个服务,该服务绑定到了一个可视的activity 3 服务进程:它是一个运行着一个用startService()方法启动的服务,并且该服务没有落入上面2种分类。虽然服务进程没有直接关系到任何用户可见的,它们通常做用户关心的事(例如:在后台播放mp3或者从网络上下载数据)
4 后台进程一个保持着一个当前对用户不可视的activity(已经调用Activity对象的onStop()方法)。这些进程没有直接影响用户体验,并且可以在任何时候被杀以收回内存用于一个前台、可视、服务进程。一般地有很多后台进程运行着,因此它们保持在一个LRU(least recently used,即最近最少使用,如果你对操作系统很熟悉,跟内存的页面置换算法LRU一样。)列表以确定最近使用过最多的活动的进程最后被杀。如果一个活动执行正确生命周期方法,且捕获它当前的状态,杀掉它对用户的体验没有伤害的影响。
5 空进程是一个没有保持活跃的应用程序组件的进程。保持这个进程可用的唯一原因是作为一个cache以提高下次启动组件的速度。系统进程杀死这些进程,以在进程cache和潜在的内核cache之间平衡整个系统资源。