Service
- 注意事项:
- Service 执行耗时操作,提示ANR错误
- Service的声明
- 属性
- android:enabled
- 服务能否被实例化,默认true
- android:exported
- 其他应用组件能否调用服务
- 默认值
- 没有配置intent-filter标签
- false
- 不可以被其他应用组件访问
- false
- 配置intent-filter标签
- true
- 可以被其他应用组件访问
- true
- 没有配置intent-filter标签
- android:permission
- 有权限的组件可准许访问Service
- android:process
- 配置Service运行的进程,允许Service运行在不同app进程的一个新进程
- android:process=":aaa"
- 配置Service运行的进程,允许Service运行在不同app进程的一个新进程
- android:enabled
- 属性
- Service的重要方法
- onStartCommand
- 当其他组件调用StartService时启动,在后台无限运行,实现该方法后需调用stopSelf/stopService
- onBind
- 当其他组件调用bindService时启动,方法必须实现,如需不想绑定,则返回null
- onCreate
- 在服务第一次创建时,系统调用一次
- onDestroy
- 销毁
- onStartCommand
- Service启动方式
- started
- 启动方式
- startService
- 如何销毁
- 自己主动调用stopSelf
- 其他组件调用stopService
- 如何提供服务
- startService,Service的onStartCommand会被回调处理事件
- 特点
- 如果没有主动调用stopService方法去停止Service,或者没有被操作系统杀死,那么service会一直运行
- 启动方式
- bound
- 启动方式
- bindService:(intent,ServiceConnection,flag)
- 三个参数(intent,ServiceConnection,flag)
- 需要自定义ServiceConnection,实例化onBinder 中方法
- 三个参数(intent,ServiceConnection,flag)
- bindService:(intent,ServiceConnection,flag)
- 如何销毁
- 所有bound到service的组件解绑
- unbindService
- 所有bound到service的组件解绑
- 如何提供服务
- Service端
- 创建LocalService继承Binder,实现服务需要的方法
- onBinder中将LocalService的实例返回组件:new LocalServiceBinder()
- Client端
- 在ServiceConnection的onServiceConnected方法中接收IBinder对象
- 将IBinder声明为LocalService
- 调用LocalService方法
- Service端
- 启动方式
- started
- IntentService
- 如何处理事物
- onHandleIntent方法内处理事务
- 特点
- 对每个请求创建一个工作线程去处理
- 不必同时处理多个请求
- 请求处理完成后自动销毁
- 如何处理事物
- 使用Messenger
- 概述
- BindService的时候使用
- 允许不借助AIDL的跨进程通讯
- 如何提供服务
- Service端
- 实现一个Handler
- 使用Handler创建Messenger
- Messenger.getBinder()
- Client端
- bindService
- 在ServiceConnection的onServiceConnected方法中接收IBinder对象
- 使用IBinder对象创建Messenger
- 使用Messenger对象发送Message
- Service端