Service

1、Service 基本概念

Service 是Android 四大组件之一可在后台 长期执行任务,而不必提供任何交互界面。但是,Service依赖创建时的应用程序进程,如果该进程被清理,那么Service也会被终止。例如,使用网易云音乐App播放音乐时,应用会创建一个前台Service播放音乐,用户可以通过通知栏消息感知该服务正在运行;此时,即便用户将网易云音乐App置于后台,然后打开微信App聊天,仍然能够畅享音乐;但若用户将网易云音乐App清除,那么音乐播放服务也将被终止


注意:

Service 默认主线程 执行任务,需手动 创建子线程


2、Service 常见的应用场景

Service 一般用来 在后台执行耗时,并且不需要直接和用户进行交互 的任务:

  • 文件下载:后台执行大文件下载,不影响用户其它操作

  • 音乐播放:用户可在使用其他应用时继续听音乐

  • 定位服务:实时刷新用户当前的位置,提供地图导航服务等


注意:

运行Service的时候需要关注 电量消耗 问题

使用 前台Service 提高优先级,可降低被系统回收的风险


3、Service 生命周期

Service 提供了以下几个生命周期方法:

  • onCreate:Service 创建时回调一次,这里可进行 初始化 操作;只要Service不被终止,后续调用 startService/bindService 只执行 onStartCommend / onBind 方法

  • onStartCommand:调用 startService 时回调,执行 Service的处理逻辑

  • onBind:调用 bindService 时回调,返回一个Binder实例,通过该实例可以和Service进行交互

  • onUnbind:调用 unbindService 时回调

  • onDestroy:当 Service 被销毁 时回调

示意图如下:                                              

                                 Service创建
                                      |
                                      v
                                  onCreate()
                                      |
                           +---------+---------+
                           |                   |
                     startService()        bindService()
                           |                   |
                           v                   v
                    onStartCommand()        onBind()
                           |                   |
                           |                客户端交互
                           |                   |
                     stopService()        unbindService()
                           |                   |
                           |                   v
                           |               onUnbind()
                           |                   |
                           +--------+----------+
                                    |
                                    v
                                onDestroy()
                                    |
                                    v
                               Service销毁
4、Service 使用流程

Service 的使用方式有两种:

  • 通过 startService 启动,stopService / stopSelf 终止

  • 通过 bindService 绑定,unbindService 终止

基本步骤大同小异:

Step1. 创建 Service子类

Step2. 在 AndroidManifest.xml 中注册

Step3. 开启 / 终止 Service


注意:

Service的子类 都需要重写onBind,但是使用 startService 启动Service时,这里返回null即可;否则,需返回一个Binder实例

startService:一般重写 onCreate、onStartCommand 和 onDestroy:

onCreate:创建Service的时候调用一次,即第一次调用startService时走一次,后续调用startService时不走,而是重复调用onStartCommand

onStartCommand:放置Service 需处理 的逻辑

onDestroy:销毁 Service

onBind:必须重写,但是使用这种方式启动Service,这里返回null

bindService:一般重写 onCreate、onBind 和 onDestroy;其中,onBind方法需要返回一个Binder实例,该Binder类中放置Service的处理逻辑

无论是哪种方法,Service只会 被创建 / 绑定一次

如果需要和Service进行交互,使用bindService启动Service,因为这里的onBind方法会返回一个IBinder实例,在ServiceConnection的onServiceConnected方法中,可获取该实例和Service进行交互


5、Service 的类型

Service 可分为三种类型:普通Service、前台Service 和 意图Service

其中,startService / bindService 启动的Service 即为普通Service,运行在 主线程

前台Service 是运行在 前台 的Service,通常就是 设备消息栏 中的一条消息,可被用户感知,并且 优先级相对较高,可长时运行

意图Service,即IntentService,会 独立开启子线程 执行任务,并且自动终止,不必手动调用stopService

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值