现在的位置: 首页 > 综合 > 正文

android之Service介绍之三 AIDL与传递对象

2013年08月05日 ⁄ 综合 ⁄ 共 6018字 ⁄ 字号 评论关闭

除了上一篇文章我们提到的通过service提供音乐播放等类似的服务之外,我们还可以通过service将对象传递回来哦,你知道怎么用吗,先看例子:

当我们点击“获取”时,会从另一个线程的service中获取一个对象,然后将里面的内容读出来。

--------------------------------------------------------------------------------------------

对于aidl实现以对象的方式交互。主要步骤如下:

 

 

服务端:

第一:定义一个实体类,这里是Beauty,定义一个服务接口aidl文件RemoteBeauty.aidl,这里有一点需要注意,我们引用自定义的实体类到aidl中时需要通过import导入包,但是你会发现,即使你导入了包,还是提示找不到,这时候,你要做的是,建一个以实体类名称命名的aidl文件,如Beauty.aidl,在里面添加一句pracelable Beauty。

第二:开始编写Beauty,这里一定要注意,它一定要实现Pracelable接口,该接口是一个序列化的接口,功能和serializable相似,但是功能更加的迅速。此外,在该Beauty内部一定要声明一个public static final Pracelable.Creator<T>CREATOR对象!!除了里面的那个T代表实体类之外,其他的都不准改变哦。

 

第三:在androidManifest.xml中注册service。并定义好访问该service的action字符串。

 

 

客户端:

客户端这边相应的要简单很多,但是要注意的一点是,要将实体类还有aidl文件都拷贝过来哦,而且要保证路径完全一致!!

 

-------------------------------------------------------------

代码示例:

服务端:

 

Beauty.java

 

 

 

RemoteService.java

ServiceActivity.java

Beauty.aidl

RemoteBeauty.aidl

manifest.xml

-------------------------------------

客户端:

ClientActivity.java

另外Beauty.java 以及RemoteBeauty.aidl都是从服务端系统中拷贝过来的哦。

 

 

 如果你想你的service在系统开机时自启动。可以在service的androidManifest.xml中加上这样的配置。

<receiver android:name=".StartBroadcastReceiver">

 

            <intent-filter>

   <action android:name="android.intent.action.BOOT_COMPLETED"/>

            </intent-filter>        

</receiver>

抱歉!评论已关闭.