读《疯狂Android讲义》之Service运用总结

前段时间一直研究Android系统底层的一些东东,把Android基本应用测的东西都有些遗忘了。这里依据李刚的《疯狂Android讲义》对service的运用进行了回顾,并总结出了相应的运用步骤,以便今后参考使用。这里包括了service的所有运用情况:简单本地启动,绑定本地启动以及远程调用(aidl),下面直入主题:

(原文链接:http://blog.csdn.net/gulinxieying/article/details/51890082

无论远程还是本地创建service,前提都需要先在相应manifest.xml中进行配置,举例如下:

<ser vice android:name=".FirstService">
    <intent-filter>
        <action android:name="org.crazyit.service.FIRST_SERVICE" />
    </intent-filter>
</ser vice>

1、简单启动本地service(非绑定):
【步骤】ss
客户端——
- 创建intent;
- 在intent中添加指向目标service的动作(action):intent.setAction(org.crazyit.service.FIRST_SERVICE);
- 启动:startService(intent); / 停止:stopService(intent);
(参考程序见附件:FirstService


2、绑定本地service:
【步骤】
service端——
- 在Binder类(一般会自定义类,且让该类继承自Binder)中创建自己需要传递数据的方法;
- 创建一个Binder实例binder;
- 在IBinder onBind(Intent intent)方法中返回该上步创建的Binder实例binder;
客户端——
- 创建service端实例SV;
- 复写ServiceConnection中的onServiceConnected(将Ibinder参数传递给上述service端实例SV)和onServiceDisconnected方法;
- 创建ServiceConnection实例conn;
- 创建Intent实例intent;
- 在intent中添加指向目标service的动作(action):intent.setAction(org.crazyit.service.BIND_SERVICE);
- 开始绑定:bindService(intent, conn, Service.BIND_AUTO_CREATE); /
解绑定:unbindService(conn);
- 通过第一步创建的SV实例进行service端函数的调用以及数据的交互;
(参考程序见附件:Bindservice


3、远程调用service(AIDL服务):
(说明:远程调用service也是通过绑定service进行的,所以,具体步骤中除了service端的前两步之外,其余都与绑定本地service一样)
【步骤】
service端——
- 创建aidl接口文件ICat.aidl;
- 使用ADT工具生成相应java文件(该java文件中会使ICat类中的Stub类继承自Binder);
- 在Stub类(一般会自定义类,且让该类继承自Stub)中复写第一步中接口文件ICat.aidl中的接口方法;
- 创建一个Stub实例SB;
- 在IBinder onBind(Intent intent)方法中返回该上步创建的Stub实例SB;

客户端——
- 创建service端实例SV;
- 复写ServiceConnection中的onServiceConnected(将Ibinder参数传递给上述service端实例SV)和onServiceDisconnected方法;
- 创建ServiceConnection实例conn;
- 创建Intent实例intent;
- 在intent中添加指向目标service的动作(action):intent.setAction(org.crazyit.service.BIND_SERVICE);
- 开始绑定:bindService(intent, conn, Service.BIND_AUTO_CREATE); / 解绑定:unbindService(conn);
- 通过第一步创建的SV实例进行service端函数的调用以及数据的交互;
(参考程序见附件:AidlService

注意:
Android要求调用远程Service的参数和参会之都必须实现Parcelable接口。且实现Parcelable接口不仅要求实现该接口里定义的方法,还要求在实现类中定义一个名为CREATOR、类型为Parcelable.Creator的静态Field。另外,还要求使用AIDL代码来定义这些自定义类型。
(参考程序见附件:ComplexAidlService)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值