Android四大组件之Service(观第一行代码2随记)三.前台服务以及IntentService

本文探讨了Android中前台服务的使用场景与实现方法,包括如何创建通知并使用startForeground保持服务运行,以及IntentService自动开启子线程与自动停止的特点。

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

 服务基本上是在后台默默运行的额,但是由于服务的系统优先级比较低,当出现内存不够的时候,系统可能会回收掉正在后台运行的程序。如果希望服务一直保持着运行状态而不是因为内存不够而被系统回收,那么可以考虑使用一个前台服务。前台服务有些类似于通知。有时我们为了防止服务被回收而使用前台服务,但有些项目由于特殊的需求必须使用前台服务,比如说彩云天气,它的服务在后台更新天气数据的同时,还会在系统状态栏一直显示当前的天气信息。

        前台服务和普通服务都是同样的Service的创建方法,它们内部的方法都是一样的,唯一的区别在于前台服务会在onCreate方法里面创建通知,并使用startForeground将通知显示,当然并没有使用NotificationManager,因为这里使用startForeground更适合。      而会自动停止的Intent Service则少有所不同,特别是它独有的onHandleIntent方法。

一。创建前台服务的时候传入的图片资源需要注意,死在这上面了,事实上这个调用不到对应的图片。必须要有明确的png图片。

活动中启动service和启动正常service的程序相同。而在MyService类中,在onCreate中的改动如下:


二。接下来就是Intent Service这个会自动停止的异类啦,其实Intent Service只是比正常的Service多出了个自动开启子线程,以及会自动停止这样的优势。

当没有Intent Service的时候,在服务中处理一个耗时逻辑需要开启一个线程,再加上为了防止它一直处于运行状态,(忘了stopService),还需要加个stopSelf方法让他自动停止。也就是如下所示:

(可以试试加个延时,如左图)

鉴于此种麻烦,Android专门提供了这样一个类来解决前面的两种尴尬(忘开线程和忘记调用stop Service或stopself):

Intent Service类:

IntentService对比于普通Service的一大优势是,在onHandleIntent中处理信息不用担心ANR问题,因为该方法在子线程之中运行。子线程!!!

自动开启线程和自动停止服务的证明!  啊啊啊啊啊啊啊,一个很重要的问题,因为是自己写的一个类继承了Intent Service而不是通过AS创建的,所以千万别忘了要在AndroidManifest中注册啊!!!没有注册的都是非法的纸老虎,会被人民碾碎的。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值