一:
startService()
缺陷:我们不能调用服务里面的方法,不可以与服务进行通讯
bindService()绑定服务
可以间接的调用到服务里面的方法,可以与服务进行通讯
二:
绑定服务调用服务方法的步骤
1:编写服务代码
public IBinber onBinb(Intent intent){ }
2:再服务内定义一个代理人 MyBinder
代理人对象有一个方法可以间接的调用服务内部的方法
3:在onBind方法厘米那返回代理人对象
4:在Activity代码采用绑定的方式连接到服务
bingService(intent,new Myconn(),BIND_AUTO_CREATE)
5:在serviceConnection的实现类里面有一个方法,获取都服务返回的代理人对象
public void onserviceConnected(ComponentName name,IBinder service)
6:强制类型转换
‘ myBind = (IBinder)service
7:调用代理人方法--间接调用服务里面的方法
三:
绑定方式开启服务的生命周期
1:绑定的方式开启服务,如果服务不存在,oncreat -> onbind
2:服务的onstart 和 onstartcommand()方法不会被执行
3:接触绑定服务 onunbind()->ondetroy()
4:对此绑定服务,服务只会被创建一次,oncreat方法只会被执行一次
5:多次绑定服务,onbind方法不会被重复调用
6:在实际开发的时候,如果需要调用服务的方法,就绑定服务,只能绑定一次
7:服务只可以解绑一次,如果用同一个conn对象多次解绑,服务会抛出异常
四:
两种开启服务方式的比较
1:start的方式开启服务
服务一旦开启,长期在后台运行
服务和开启者(activity)没有任何的关系,开启者退出服务,服务还是会继续在后台长期运行
开启者(acticity)不可以调用服务中的方法
在系统设置里面可以看的到
2: bing的方式开启服务
如果开启者(activity)退出了,服务也会跟着挂掉
开启者(activity)可以间接的利用中间人调用服务里面的方法
在系统设置里面可以看不到
服务如果被开启同时被绑定,服务就停不掉了,必须解除绑定服务次啊可以停止服务
五:
混合的方式开启服务
为了保证服务既能长期在后台运行,又能调用到服务里面的方法,采用混合的方式开启服务
步骤:
1:start的方式开启服务(保证服务长期在后台运行)
2:bind的方式开启服务(调用服务的方法)
3:unbind的方法接触绑定服务
4:stop的方式停止服务