Android进程优先级

前言

Android在内存紧张的时候会对进程采取一定的策略来终止进程,而这些策略是往往是根据进程的优先级来出处理的

优先级的五个分类

优先级由高到低排列

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

前台进程

指正在与用户进行交互的应用进程,该进程数量较少,是最高优先级进程,系统一般不会终止该进程,而判断为前台进程的因素有以下这些

  • 进程中包含处于前台的正与用户交互的activity;

  • 进程中包含与前台activity绑定的service;

  • 进程中包含调用了startForeground()方法的service;

  • 进程中包含正在执行onCreate(), onStart(), 或onDestroy()方法的service;

  • 进程中包含正在执行onReceive()方法的BroadcastReceiver.

可视进程

能被用户看到,但不能根据根据用户的动作做出相应的反馈,

因素

  • 进程中包含可见但不处于前台进程的activity(如:弹出对话窗时activity处于可见状态,但并不处于前台进程中)

  • 该进程有一个与可见/前台的activity绑定数据的service

服务进程

没有可见界面仍在不断的执行任务的进程,除非在可视进程和前台进程紧缺资源(如:内存资源)才会被终止
因素

  • 包含除前台进程和可视进程的service外的service的进程

后台进程

通常系统中有大量的后台进程,终止后台进程不会影响用户体验,随时为优先级更高的进程腾出资源而被终止,优先回收长时间没用使用过的进程。
因素

  • 包含不在前台或可视进程的activity的进程,也就是已经调用onStop()方法后的activity

空进程

为提高整体系统性能,系统会保存已经完成生命周期的应用程序 ,存在与内存当中,也就是缓存,为下次的启动更加迅速而设计。通常会被定期地终止

进程间的优先级关系

由于组件之间的依赖性, 进程的优先级有可能被提高
当进程A服务于进程B时,进程A的优先级不能低于进程B,但按照优先级的规则来算,进程A的优先级会低于进程B
如:进程A中的content provider为进程B提供服务,或者进程A中有一个Service与进程B中的组件进程绑定

执行耗时操作的进程选择

当执行耗时操作时(如:获取网络数据),我们需要一个新的进程来执行该操作。我们需要考虑是选择通过子线程还是service来执行。如果使用子线程的话,如果当前的activity变成不可见的话,进程便会成为后台进程。但如果选择使用service时,则成为服务进程。而后台进程会随时被终止。所以需要考虑业务的需求来采取不同的策略。

参考资料

Android系统中的进程管理:进程的优先级
Android进程的优先级
https://blog.csdn.net/fhy_2008/article/details/7328967

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值