当前位置:首页 > 未命名 > 正文内容

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

u3blog10年前 (2015-03-12)未命名447

首先定义对象类,并实现Parcelable接口,实现接口内的几个方法,看代码,Person.java

  1. package com.example.u3.aidltest;
  2. import android.os.Parcel;
  3. import android.os.Parcelable;
  4. /**
  5. * Created by U3 on 2015/3/11.
  6. */
  7. public class Person implements Parcelable {
  8. private String name;
  9. public String getName() {
  10. return name;
  11. }
  12. public void setName(String name) {
  13. this.name = name;
  14. }
  15. public String getPass() {
  16. return pass;
  17. }
  18. public void setPass(String pass) {
  19. this.pass = pass;
  20. }
  21. private String pass;
  22. @Override
  23. public int describeContents() {
  24. return 0;
  25. }
  26. public static final Creator CREATOR = new Creator() {
  27. @Override
  28. public Person createFromParcel(Parcel source) {
  29. return new Person(source);
  30. }
  31. @Override
  32. public Person[] newArray(int size) {
  33. return new Person[size];
  34. }
  35. };//用于创建
  36. public Person()//测试用
  37. {
  38. name = "hel";
  39. pass = "213";
  40. }
  41. @Override
  42. public void writeToParcel(Parcel dest, int flags) {
  43. dest.writeString(name);
  44. dest.writeString(pass);
  45. }
  46. private Person(Parcel in)//必须与上面的写入顺序相同,否则值会错误
  47. {
  48. name = in.readString();
  49. pass = in.readString();
  50. }
  51. }

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

Person.aidl

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

myaidl.aidl

  1. // myaidl.aidl
  2. package com.example.u3.aidltest;
  3. // Declare any non-default types here with import statements
  4. import com.example.u3.aidltest.Person;//需要先引入
  5. interface myaidl {
  6. /**
  7. * Demonstrates some basic types that you can use as parameters
  8. * and return values in AIDL.
  9. */
  10. Person getperson(in Person s);
  11. }

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

  1. package com.example.u3.aidltest;
  2. import android.app.Service;
  3. import android.content.Intent;
  4. import android.os.IBinder;
  5. import android.os.RemoteException;
  6. import android.util.Log;
  7. /**
  8. * Created by U3 on 2015/3/11.
  9. */
  10. public class Server extends Service {
  11. class My extends myaidl.Stub {//继承自动生成的类,实现方法
  12. @Override
  13. public Person getperson(Person s) throws RemoteException {
  14. Log.v("sk", s.getName()+" "+s.getPass());
  15. s.setName("hi!!!!");
  16. return s;
  17. }
  18. }
  19. @Override
  20. public IBinder onBind(Intent intent) {
  21. return new My();
  22. }
  23. }

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

两边的结构图如下

服务端结构

客户端结构

阅读剩余的47%

扫描二维码推送至手机访问。

版权声明:本文由u3blog发布,如需转载请注明出处。

本文链接:https://u3blog.xyz/?id=63

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。