Android Service(四)

来源:互联网 发布:淘宝怎样设置降价提醒 编辑:程序博客网 时间:2024/06/05 15:12

        上次说到了,我们想掉用service的接口set或者是get一个对象,可是aidl文件里只能声明基本的数据类型,那怎么传递对象呢?方法一般是让对象实现Parcelable接口,这样对象就可以read 或者 write到一个parcel对象里。

如下:

//MyRect.java@Overridepublic int describeContents() {// TODO Auto-generated method stubreturn 0;}public static final Parcelable.Creator<MyRect> CREATOR = new Parcelable.Creator<MyRect>() {@Overridepublic MyRect createFromParcel(Parcel source) {// TODO Auto-generated method stubreturn new MyRect(source.readInt(), source.readInt(), source.readInt(), source.readInt());}@Overridepublic MyRect[] newArray(int size) {// TODO Auto-generated method stubreturn new MyRect[size];}};@Overridepublic void writeToParcel(Parcel dest, int flags) {// TODO Auto-generated method stubdest.writeInt(mLeft);dest.writeInt(mTop);dest.writeInt(mRight);dest.writeInt(mBottom);}public void readFromParcel(Parcel _reply) {// TODO Auto-generated method stubmLeft = _reply.readInt();mTop = _reply.readInt();mRight = _reply.readInt();mBottom = _reply.readInt();}
这里的static变量CREATOR是必需要有的。此外我们还要在aidl文件里对MyRect类进行声明,并且类名保持一至。

//MyRect.aidl
package com.example.servicedemo;parcelable MyRect;

这样我们就可以在Service里进行引用了

package com.example.servicedemo;import com.example.servicedemo.MyRect;interface IServiceDemo {void sayHello();void setRect(inout MyRect rect);}

Service的用法大概就说这么多吧,算是个笔记吧,至于各中原理,还要细细读源码,也希望了解的同鞋多多分享。demo 源码

详细还是看google的文档:https://developer.android.com/guide/components/aidl.html




原创粉丝点击