您的位置:首页 > 大数据 > 人工智能

【整理】使用AIDL跨进程传递复杂对象的实践例子

2015-03-12 17:08 351 查看
首先定义对象类,并实现Parcelable接口,实现接口内的几个方法,看代码,Person.java

package com.example.u3.aidltest;

import android.os.Parcel;
import android.os.Parcelable;

/**
* Created by U3 on 2015/3/11.
*/
public class Person implements Parcelable {
private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getPass() {
return pass;
}

public void setPass(String pass) {
this.pass = pass;
}

private String pass;
@Override
public int describeContents() {
return 0;
}

public static final Creator<Person> CREATOR = new Creator<Person>() {
@Override
public Person createFromParcel(Parcel source) {
return new Person(source);
}

@Override
public Person[] newArray(int size) {
return new Person[size];
}
};//用于创建
public Person()//测试用
{
name = "hel";
pass = "213";
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeString(pass);
}
private Person(Parcel in)//必须与上面的写入顺序相同,否则值会错误
{
name = in.readString();
pass = in.readString();
}

}


然后,新建两个AIDL文件,一个声明接口一个声明上面的类,声明类的AIDL名字必须与类相同,看代码

Person.aidl

package com.example.u3.aidltest;//包名
parcelable Person;


myaidl.aidl

// myaidl.aidl
package com.example.u3.aidltest;

// Declare any non-default types here with import statements
import com.example.u3.aidltest.Person;//需要先引入
interface myaidl {
/**
* Demonstrates some basic types that you can use as parameters
* and return values in AIDL.
*/
Person getperson(in Person s);
}


然后在服务中使用自动生成的类,实现方法,见代码

package com.example.u3.aidltest;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;

/**
* Created by U3 on 2015/3/11.
*/
public class Server extends Service {
class My extends myaidl.Stub {//继承自动生成的类,实现方法
@Override
public Person getperson(Person s) throws RemoteException {

Log.v("sk", s.getName()+" "+s.getPass());
s.setName("hi!!!!");
return s;
}
}

@Override
public IBinder onBind(Intent intent) {
return new My();
}
}


然后在客户端,复制AIDL文件所在包和Person以及他的包

两边的结构图如下

服务端结构


客户端结构
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: