Service
当将Activity或包含的属性交给比自己生命周期长的组件,出现ServiceConnectionLeaked异常。所以activity销毁的时候需要解绑。
1、启动模式---Service
Android中的进程优先级
1、前台进程
1)包含处于交互状态的Activity的进程
2)包含正在执行生命周期方法的组件的进程
3)包含与处于交互状态的activity绑定的service实例的进程
4)包含执行了 setForeground(true) 方法的service的进程
2、可见进程
1)包含处于暂停状态的Activity的进程
2)包含与处于暂停状态的activity绑定的service实例的进程
3、服务进程
包含处于运行状态的Service实例的进程
4、后台进程
包含处于停止状态的Activity的进程
5、空进程
不包含任何存活的组件实例的进程
Service
1、是Android四大组件之一
2、是Context的间接子类
3、是单例的
4、Service不包含界面
5、Service实例所在的进程拥有较高的优先级
6、Service适用于需要长时间在后台运行代码的场合
7、Service的生命周期方法同样运行在主线程,不能在
这些方法中执行耗时任务
8、创建Service
1)创建类 扩展 Service
2)重写生命周期方法
3)注册
9、启动service
1)创建intent对象
2)调用context对象的startService方法启动service
10、停止Service
1)调用context对象的stopService方法
2)在Service中调用stopSelf方法
3)在Service中调用stopSelf(int startId)方法
11、启动模式下的生命周期
onCreate
onStartCommand
onDestroy
2、绑定模式------Service
Binder是IBinder接口的实现类,线程通信
隐式意图作用:跨应用程序、跨进程
使用步骤:
1.创建服务类,继承自Service ,重写onBind方法,返回Binder对象。
2.在Activity中,调用bindService方法,指定要绑定的Service和绑定成功或失败后的回调对象(ServiceConnection)
绑定模式的Service生命周期:
onCreate:当创建Service实例时执行此方法
onBind:当第一个客户端绑定到Service时执行onBind
onUnbind:当最后一个客户端从Service解绑执行onUnbind
onDestroy:当销毁Service实例时执行此方法
绑定的特点:
1.每个客户端y只能绑定到一个Service实例一次
2.在单纯的绑定模式下,当所有绑定到Service的客户端都解绑的时候,service会被销毁。
Service内部有一个绑定的计数器。每绑定一个客户端,计数+1,每解绑一个客户端,计数-1.
混合启动模式:
既使用startService启动Service
又使用bindService绑定Service