Android进阶之进程优先级及提高优先级的方法(进程保活)

本文详细介绍了 Android 中 Service 的不同生命周期状态及其对应的进程优先级,并提供了多种实用技巧以保证 Service 在复杂环境下能够持续运行。从设置 Service 的优先级、使用前台 Service、到通过广播重启 Service,以及更高级的技术方案,如监听系统广播、应用状态改变等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 生命周期

service:是一个后台服务,专门用来处理常驻后台的工作的组件。为了决定哪些进程留下,哪些进程被杀死,系统根据在进程中在运行的组件及组件的状态,为每一个进程分配了一个优先级等级,优先级最低的进程首先被杀死。

Android会尽可能高的估量一个进程的级别。比如,一个进程拥有一个可见状态的activity和一个service,这个进程会被认为是可见进程,而不是服务进程。

一个进程的级别可能会由于其它进程依赖于它而升高。一个为其它进程提供服务的进程级别永远高于使用它服务的进程。比如说,如果A进程中的内容提供者为进程B中的客户端提供服务,或进程A中的服务为进程B中的组件所绑定,则A进程高于或者等于进程B的等级。

2 进程的五个常用等级

2.1 前台进程:杀死前台进程需要用户交互,因为前台进程的优先级是最高的

(1)进程持有一个正在与用户交互的Activity
(2)进程持有一个Service,这个Service处于这几种状态:

①Service与用户正在交互的Activity绑定;
②Service调用了startForeground(),在前台运行;
③Service执行在用户正在交互的Activity的生命周期回调函数中(onCreate(), onStart(), onDestroy())。

(3)进程持有一个BroadcastReceiver,这个BroadcastReceiver正在执行它的 onReceive() 方法。

2.2 可见进程

如果一个进程不含有任何前台的组件,但仍可被用户在屏幕上所见。可见的进程也是很重要的,一般不会被销毁,除非是为了保证所有前台进程的运行而不得不杀死可见进程。

当满足如下任一条件时,进程被认为是可见的:
(1)进程持有一个Activity,这个Activity不在前台,但是仍然被用户可见(处于onPause()调用后又没有调用onStop()的状态,比如:前台的activity打开了一个对话框,这样activity就会在其后可见);
(2)进程持有一个Service,这个Service和一个可见的(或者前台的)Activity绑定。

2.3 服务进程

一个进程中运行着一个service,这个service是通过startService()开启的,比如后台播放音乐,后台下载数据等。

2.4 后台进程

通常会有很多个后台进程存在,它们会被保存在一个LRU (least recently used)列表中,这样就可以确保用户最近使用的activity最后被销毁,即最先销毁时间最远的activity。

(1)**进程持有一个用户不可见的Activity(activity的onStop()被调用,当此Activity退出到桌面),就认为进程是一个后台进程。**后台进程不直接影响用户体验,系统会为了优先级高的进程而任意杀死后台进程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值