gpt4 book ai didi

android - Android进程调度

转载 作者:行者123 更新时间:2023-12-02 14:21:13 25 4
gpt4 key购买 nike

我试图更好地理解,以便在创建android应用/服务时可以确定潜在的互操作性问题对可靠性的影响。我想弄清楚如何确定流程优先级。服务和 Activity 之间的优先级差异,以及调度程序是否以不同的方式对待其优先级。基本上,我试图对来自不同应用程序(甚至Linux内核)的恶意进程饿死 Activity 或服务的可能性有一个深刻的了解。

有没有人可以推荐您的任何良好链接...我的搜索还没有很多。

谢谢!

编辑:我关心的是关于处理器时间切片/调度,而不是内存资源(内存资源在android文档中有很好的描述。)再次感谢!

最佳答案

以下列表按重要性顺序显示了不同类型的过程(第一个过程最重要,最后一个被杀死):

  • 前台流程
  • 可见过程
  • 服务流程
  • 后台进程
  • 空进程

  • 注意: Android会根据该进程中当前 Activity 组件的重要性,将其按最高级别进行排名。例如,如果某个流程托管服务和可见 Activity ,则该流程将被列为可见流程,而不是服务流程。

    这是从这里引用的 Processes and Threads

    编辑:

    了解应用程序优先级和流程状态

    杀死进程以回收资源的顺序由托管应用程序的优先级确定。应用程序的优先级等于其最高优先级组件。

    如果两个应用程序具有相同的优先级,则优先级较低的进程最长的进程将首先被杀死。进程优先级还受进程间依赖关系的影响;如果某个应用程序依赖于第二个应用程序提供的服务或内容提供者,则辅助应用程序将至少具有与其支持的应用程序一样高的优先级。

    所有Android应用程序将一直运行并保留在内存中,直到系统需要其他应用程序的资源为止。

    正确构造应用程序以确保其优先级适合其正在执行的工作非常重要。否则,您的应用程序可能会因为处于重要状态而被杀死。
    以下列表详细列出了图2中所示的每个应用程序状态,解释了该状态如何由组成该状态的应用程序组件确定:

    Activity 进程 Activity (前台)进程是托管具有当前正在与用户交互的组件的应用程序的进程。这些是Android试图通过回收资源来保持响应的过程。这些过程通常很少,只有在不得已时才将其杀死。

    Active processes include:



    1.处于“ Activity ”状态的 Activity ;也就是说,它们位于前台并响应用户事件。您将在本章后面更详细地探讨 Activity 状态。

    2.当前正在执行onReceive事件处理程序的 Activity ,服务或广播接收器。

    3.正在执行onStart,onCreate或onDestroy事件处理程序的服务。

    可见进程可见,但不 Activity 的进程是承载“可见” Activity 的进程。顾名思义,可见的 Activity 是可见的,但它们不在前台或对用户事件进行响应。当某个 Activity 仅被部分遮挡(非全屏或透明的 Activity )时,就会发生这种情况。通常,可见的流程很少,只有在极端情况下才会杀死它们,以使 Activity 的流程得以继续。

    已启动的服务进程进程托管已启动的服务。服务支持正在进行的处理,这些处理应在没有可见界面的情况下继续进行。由于服务不会直接与用户互动,因此它们的优先级比可见的 Activity 低。它们仍然被认为是前台进程,除非 Activity 或可见进程需要资源,否则它们不会被杀死。

    后台进程承载不可见且未启动任何服务的 Activity 的进程被视为后台进程。通常,会有大量的后台进程,Android将使用“先看先消”的模式来杀死这些后台进程,以获取前台进程的资源。

    空进程为了提高整体系统性能,Android通常会在使用生命周期到期后将应用程序保留在内存中。 Android会维护此缓存,以在重新启动应用程序时缩短它们的启动时间。通常会根据需要将这些过程终止。

    有关更多信息,请参见此处(我在此博客上找到) Memory Management in 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约束,因为它几乎花费所有时间等待用户按键(无论用户键入速度有多快,也没有那么快)。尽管如此,当它确实收到按键时,用户希望编辑者立即做出响应。相反,视频编码器受处理器限制。除了从磁盘读取原始数据流并随后写入结果视频外,编码器还花费所有时间将视频编解码器应用于原始数据。它的运行时间没有任何严格的时间限制-如果现在或半秒后开始运行,用户将无法分辨。当然,越早完成越好。

    在此系统中,由于文本编辑器是交互式的,因此与视频编码器相比,调度程序为文本编辑器提供了更高的优先级和更大的时间片。文本编辑器具有大量可用的时间片。此外,由于文本编辑器具有更高的优先级,因此能够在需要时抢占视频编码器。这样可以确保文本编辑器能够立即响应用户的按键操作。这不利于视频编码器,但是由于文本编辑器只能间歇运行,因此视频编码器可以独占剩余时间。这样可以优化两个应用程序的性能。

    关于android - Android进程调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7931032/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com