Android OomAdj(二)Cached进程、Empty进程和mem_factor、Trim

本文深入探讨Android进程的优先级,包括空进程(empty)和缓存进程(cached)的区别。讲解了ADJ_MEM_FACTOR如何反映系统内存状态,并介绍了Trim内存级别的意义,阐述了Android如何通过调整进程的adj值来优化内存使用和提升用户体验。
摘要由CSDN通过智能技术生成

进程优先级

bindService或者startService是否前台调用取决于caller进程的调度组。当caller属于SCHED_GROUP_BACKGROUND则认为是后台调用,当不属于SCHED_GROUP_BACKGROUND则认为是前台调用。callerFg = callerApp.setSchedGroup != ProcessList.SCHED_GROUP_BACKGROUND;

  • 关于CPU调度组
调度级别 缩写 进程组 备注
SCHED_GROUP_BACKGROUND(0) B THREAD_GROUP_BG_NONINTERACTIVE 后台进程组
SCHED_GROUP_DEFAULT(1) F THREAD_GROUP_DEFAULT 前台进程组
SCHED_GROUP_TOP_APP(2) T THREAD_GROUP_TOP_APP TOP进程组
SCHED_GROUP_TOP_APP_BOUND(3) T THREAD_GROUP_TOP_APP TOP进程组
  • SCHED_GROUP_TOP_APP:
  • setRenderThread()过程,根据属性sys.use_fifo_ui来决定采用SCHED_FIFO,或者设置当前线程的优先级为-10
  • TOP_APP或者app.hasTopUi,则设置为该值
  • SCHED_GROUP_TOP_APP_BOUND:

对于ConnectionRecord带有BIND_ADJUST_WITH_ACTIVITY和BIND_IMPORTANT,并且没带有BIND_NOT_FOREGROUND的情况下, 当客户端进程的有可见的Activity,或者处于RESUMED/PAUSING状态时,则设置为该值

  • SCHED_GROUP_BACKGROUND:
  • 应用已结束(app.thread == null)
  • 正在接收来自于mBgBroadcastQueue广播队列的广播;
  • 正在执行来自于前台调度进程发起的服务(execServicesFg=false)
  • TOP_APP,且设备处于睡眠状态
    等等
  • SCHED_GROUP_DEFAULT:
  • 默认值
  • ADJ <= FOREGROUND_APP_ADJ;
  • 正在接收来自于mFgBroadcastQueue广播队列的广播;
  • 正在执行来自于前台调度进程发起的服务(execServicesFg=true)
  • Activity处于可见状态(visible=true)
  • 具有fg-service或者设置forcingToImportant的服务
  • 正在显示一个ove
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值