安卓自学笔记
第一章:基础知识
第八节:Android中Service通信
启动Service并进行通信
首先在页面上新增两个按钮用来启动服务和停止服务
在通过按钮启动服务的时候,startService方法需要一个类型为Intent的参数,可以通过这个参数,将我们指定的数据给这个Intent携带传给Service。
而在Service类里面,就可以在onStartCommand方法进行接收,然后在onCreate进行输出验证。
这个小例子是将A上的一个EditText里的内容传给Service并循环输出,每次编辑文本后再启动服务,将输出最新的字符串数据。
关键代码:
如图:

如图:

启动应用,成功实现。
绑定Service并进行通信
在页面上再新增三个按钮用来绑定服务和解除绑定服务,以及同步数据
程序需要实现ServiceConnection接口
在原来的程序基础上,再多写三个case用来处理新增加的三个按钮对应的功能
Main类代码如图:

为了使Main类和Service类能在绑定服务时能连接起来,需要通过ServiceConnection接口的onServiceConnected方法操作,这个方法的第二个参数是IBinder类型,Service类里的onBind方法的返回值类型也是一个IBinder类型。
这时候改写一下Service类的onBind方法,就能够连接起两个类了,Service类代码如图:

而Main类需要定义一个MyService.Binder类型的变量,初始化为null
并在onServiceConnected方法里为其赋值 binder = (MyService.Binder)service;
相比于第一种启动Service的方法,绑定Service的方法更加方便和高效,是直接方法调用,不是通过Intent来进行数据传递。
以上是在服务内部运行代码,接下来是
监听服务内部代码并通知外界
比如把内部的信息变化呈现到外界,将要呈现到外界的信息也在控制台进行输出,如图:

通过回调机制来进行将信息呈现到外界的操作
在Service类定义一个回调接口,并定义相关变量及相关get\set方法,如图:

为使得外界能进行事件绑定,需要再定义一个get目标Service的方法,使得外界能进行访问,如图:

由于Android本身的一些机制,这里无法直接调用所传出来的信息,需要定义一个Handler来间接调用,如图:

运行结果如图

浙公网安备 33010602011771号