对service有点了解的朋友肯定都会知道服务有两种启动方式,即startService和bindService。那么这两种服务有什么区别呢?
startService的特点:
启动方式:
在其它组件中通过startService()方法启动。
停止方式:
在其它组件中通过stopService()方法停止,或者在service中调用stopSelf()方法停止.
生命周期:
onCreate()--->onStartCommand()(onStart()方法已过时) ---> onDestory()
一旦启动,service即可在后台无限期运行,即使启动service的组件已经被销毁也不受影响,直到其被停止.
说明:如果服务已经开启,不会重复的执行onCreate(), 而是会调用onStart()和onStartCommand()。
服务停止的时候调用 onDestory()。服务只会被停止一次。
与其它组件的通信方式:
没有提供默认的通信方式,启动service后该service就处于独立运行状态
使用步骤:
(1)定义一个继承service的类
(2)在配置文件Manifest.xml中配置该service
(3)使用context调用startService(Intent)方法启动该service
(4)不再使用时,调用stopService(Intent)方法停止该服务
bindService的特点:
启动方式:
在其它组件中通过bindService()方法启动。
停止方式:
所有绑定service的组件都被销毁,或者所有绑定service的组件都调用了unbindService方法后会停止
生命周期:
onCreate() --->onBind()--->onunbind()--->onDestory()
一旦启动,只有当所有绑定service的组件都被销毁,或者所有绑定service的组件都调用了unbindService方法后才会停止
说明:bind的方式开启服务,绑定服务,调用者挂了,服务也会跟着挂掉。绑定者可以调用服务里面的方法
与其它组件的通信方式:
可以通过 ServiceConnection进行通信,组件可以与service进行交互、发送请求、获取结果,甚至是利用IPC跨进程执行这些操作
使用步骤:
(1)定义一个继承service的类
(2)在配置文件Manifest.xml中配置该service
(3)使用context调用bindService(Intent, ServiceConnection, int)方法启动该service
(4)不再使用时,调用unbindService(ServiceConnection)方法停止该服务
网友评论