四大组件对OOM_ADJ的影响

1.Activity
场景进程优先级oom_adj值

已调用Activity.onResume()方法

前台进程0
已调用Activity.onPause()方法,例如,Activity上启动了一个对话框可见进程100
已调用Activity.onStop()方法后台进程一般大于900

2.Broadcast Receiver
场景进程优先级oom_adj值

执行onReceive() 时

前台进程0
退出onReceive() 时应用其他的状态决定
3.Services
场景进程优先级oom_adj值

在执行onCreate()、onStartCommand() 时

前台进程0
Service 刚运行时Service A500
若系统同时运行的Service 过多,较早运行的Service 会放到Service BService B800
运行超过30分钟、或曾经启动过activity后台进程一般大于900
Bind service情况:

(1)若进程A bind 住进程B 的service,ActivityManager会将B的重要性提升至与A 相同。如果A使用完服务后,忘了调用unbindService(),B的重要性就降不下来,极端情况是,若A是常驻的,会导致B也变成常驻了,引发系统性内存问题.

(2)若进程A bind住的service位在同一进程,则OOM_ADJ 不会因此有任何改变

4.Content Provider

(1)若进程A查询进程B的provider得到Cursor,在进程A关闭Cursor之前,ActivityManager会保持provider connection,此时B的OOM_ADJ将提升至与A相同。若进程A属于常驻应用,则B也跟着变成常驻了,就形成严重的内存问题

(2)若应用B的UID为system UID,不可开放content provider给其他应用使用。在安卓的特殊机制中,只要进程A存取(insert/update/delete/pquery) 了B的provider,provider connection 就不再结束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值