之前的笔记搬运
Service 服务
安卓的服务是为了解决通信问题,
Service是Android提供一个允许长时间留驻后台的一个组件,
想在后台做一些事情,比如后台下载更新之类的, 并且线程可以与服务通信,
就避免了在开启线程;
如: 进程中的system_process 这个就是个服务进程, 在我们使用API时,
都是与这个服务来交互的;
0x1 Service的声明周期
StartService启动Service
首次启动会创建一个Service实例,依次调用onCreate()和onStartCommand()方法,此时Service
进入运行状态,如果再次调用StartService启动Service,将不会再创建新的Service对象,
系统会直接复用前面创建的Service对象,调用它的onStartCommand()方法,
那么服务的生命周期会直到调用onDestroy后才会结束, 进程结束不影响服务;
BindService启动Service
直接调用onBind会自动创建服务, 这时进程是和服务的生命周期是一样的, 当窗口退出时,
服务会自动销毁;
StartService启动Service后bindService绑定
如果Service已经由某个客户端通过StartService()启动,
接下来由其他客户端 再调用bindService()绑定到该Service后
其他客户端再调用unbindService()解除绑定,
最后在调用bindService()绑定到Service的话,
此时所触发的生命周期方法如下:
onCreate( )->onStartCommand( )->onBind( )->onUnbind( )->onRebind( )
0x2 和Service通信
1:在自定义的Service中继承Binder,实现自己的IBinder对象
2:通过onBind( )方法返回自己的IBinder对象
3:在绑定该Service的类中定义一个ServiceConnection对象, 重写两个方法, onServiceConnected和onDisconnected!然后直接读取IBinder传递过来的参数即可!
ServiceConnection对象:
监听访问者与Service间的连接情况
如果成功连接, 则调用回调 onServiceConnected()
如果异常终止或者其他原因终止导致Service与访问者断开连接则调用回调onServiceDisconnected方法
调用unBindService()不会调用该方法;
onServiceConnected方法中有一个IBinder对象,该对象即可实现与被绑定Service
之间的通信
我们再实现自己的Service类时, 默认需要实现IBinder onBind()方法, 该方法返回的
IBinder对象会传到ServiceConnection对象中的onServiceConnected的参数,我们就可以,
在这里通过这个IBinder与Service进行通信!