以下列表按重要性顺序列出了不同类型的进程(第一个进程最重要,最后被杀死):
- 前台进程
- 可见过程
- 服务流程
- 后台进程
- 空进程
注意: Android 根据进程中当前活动组件的重要性,将进程排在它所能达到的最高级别。例如,如果一个进程承载一个服务和一个可见活动,则该进程被列为可见进程,而不是服务进程。
这是从这里引用的Processes and Threads
编辑:
了解应用程序优先级和进程状态
进程被杀死以回收资源的顺序由托管应用程序的优先级决定。应用程序的优先级等于其最高优先级的组件。
如果两个应用程序具有相同的优先级,则优先级较低的进程将首先被杀死。进程优先级也受进程间依赖的影响;如果一个应用程序依赖于第二个应用程序提供的服务或内容提供程序,则第二个应用程序将至少具有与其支持的应用程序一样高的优先级。
所有 Android 应用程序将保持运行并在内存中,直到系统需要其资源用于其他应用程序。
正确构建应用程序以确保其优先级适合其正在执行的工作非常重要。如果你不这样做,你的应用程序可能会在它处于重要的中间时被杀死。以下列表详细说明了图 中所示的每个应用程序状态,解释了状态是如何由组成它的应用程序组件确定的:
活动进程活动(前台)进程是那些托管应用程序的进程,这些应用程序具有当前与用户交互的组件。这些是 Android 试图通过回收资源来保持响应的过程。这些进程一般很少,只有在万不得已的情况下才会被杀死。
活动进程包括:
1.处于“活跃”状态的活动;也就是说,它们处于前台并响应用户事件。您将在本章后面更详细地探索活动状态。
2.当前正在执行 onReceive 事件处理程序的活动、服务或广播接收器。
3. 正在执行 onStart、onCreate 或 onDestroy 事件处理程序的服务。
可见流程可见但不活动的流程是那些托管“可见”活动的流程。顾名思义,可见活动是可见的,但它们不在前台或响应用户事件。当 Activity 仅被部分遮挡(被非全屏或透明 Activity)遮挡时,就会发生这种情况。通常可见的进程很少,它们只会在极端情况下被杀死以允许活动进程继续。
已启动的服务进程 托管已启动服务的进程。服务支持正在进行的处理,该处理应该在没有可见界面的情况下继续进行。因为服务不直接与用户交互,所以它们接收的优先级比可见活动略低。它们仍然被认为是前台进程并且不会被杀死,除非活动或可见进程需要资源。
后台进程托管不可见且没有任何已启动服务的活动的进程被视为后台进程。通常会有大量后台进程被 Android 使用最后看到的先被杀死的模式杀死,以获取前台进程的资源。
空进程为了提高整体系统性能,Android 通常会在应用程序的生命周期结束后将它们保留在内存中。Android 会维护此缓存以缩短应用程序重新启动时的启动时间。这些进程会根据需要定期终止。
有关更多信息,请查看此处(我在此博客上找到)Android 中的内存管理
编辑:
I think Android is basic Linux so, whatever scheduler works for Linux is same in Android.
Android调度器和Linux调度器的区别
调度程序 — 5 个文件 — Android 内核还包含对 CPU 进程调度程序和计时算法的细微更改。我们不知道这些变化的历史,根据粗略的检查,影响并不明显。
进程抢占:
如前所述,Linux 操作系统是抢占式的。当一个进程进入TASK_RUNNING状态时,内核会检查它的优先级是否高于当前正在执行的进程的优先级。如果是,则调用调度程序来选择要运行的新进程(可能是刚刚变为可运行的进程)。此外,当一个进程的时间片达到零时,它会被抢占,并调用调度程序来选择一个新进程。
调度策略在行动
考虑一个具有两个可运行任务的系统:一个文本编辑器和一个视频编码器。文本编辑器是 I/O 密集型的,因为它几乎所有时间都在等待用户按键(无论用户键入多快,它都不是那么快)。尽管如此,当它确实收到按键时,用户希望编辑器立即响应。相反,视频编码器受处理器限制。除了从磁盘读取原始数据流并随后写入生成的视频之外,编码器将所有时间都用于将视频编解码器应用于原始数据。它对何时运行没有任何严格的时间限制——是现在开始运行还是半秒后开始运行,用户无法判断。当然,越早结束越好。
在这个系统中,调度器赋予文本编辑器比视频编码器更高的优先级和更大的时间片,因为文本编辑器是交互式的。文本编辑器有大量可用的时间片。此外,由于文本编辑器具有更高的优先级,它能够在需要时抢占视频编码器。这确保了文本编辑器能够立即响应用户按键。这对视频编码器是不利的,但由于文本编辑器只是间歇性地运行,视频编码器可以独占剩余的时间。这优化了两个应用程序的性能。