安卓 Service和绑定服务

来源:互联网 发布:java管理系统源代码 编辑:程序博客网 时间:2024/05/17 04:52

一:

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的方式停止服务

0 0