美文网首页
Android进程优先级ADJ算法

Android进程优先级ADJ算法

作者: 蒸汽飞船 | 来源:发表于2018-07-10 23:31 被阅读42次

    参考

    当Android四大组件状态改变时会updateOomAdjLocked()来同步更新相应进程的ADJ优先级。这里需要说明一下,当同一个进程有多个决定其优先级的组件状态时,取优先级最高的ADJ作为最终的ADJ。另外,进程会通过设置maxAdj来限定ADJ的上限。

    FOREGROUND_APP_ADJ(0)

    场景1:满足以下任一条件的进程都属于FOREGROUND_APP_ADJ(0)优先级:
    1.正处于resumed状态的Activity
    2.正执行一个生命周期回调的Service(比如执行onCreate,
    3.onStartCommand, onDestroy等)
    4.正执行onReceive()的广播接收者
    5.通过startInstrumentation()启动的进程
    场景2: 当客户端进程activity里面调用bindService()方法时flags带有BIND_ADJUST_WITH_ACTIVITY参数,并且该activity处于可见状态,则当前服务进程也属于前台进程。

    VISIBLE_APP_ADJ(100)

    可见进程:当ActivityRecord的visible=true,也就是Activity可见的进程。

    PERCEPTIBLE_APP_ADJ(200)

    可感知进程:当该进程存在不可见的Activity,但Activity正处于PAUSING、PAUSED、STOPPING状态,则为PERCEPTIBLE_APP_ADJ
    满足以下任一条件的进程也属于可感知进程:

    1. foregroundServices非空:前台服务进程,执行startForegroundService()方法
    2. app.forcingToImportant非空:执行setProcessImportant()方法,比如Toast弹出过程。
    3. hasOverlayUi非空:非activity的UI位于屏幕最顶层,比如显示类型TYPE_APPLICATION_OVERLAY的窗口。

    SERVICE_ADJ(500)

    服务进程:没有启动过Activity,并且30分钟之内活跃过的服务进程。 startRequested为true,则代表执行startService()且没有stop的进程。

    相关文章

      网友评论

          本文标题:Android进程优先级ADJ算法

          本文链接:https://www.haomeiwen.com/subject/duypeftx.html