android 怎样用AIDL Service 传递复杂数据

本文详细介绍了如何在Android中通过AIDL服务传递复杂数据,包括自定义Person和Pet类实现Parcelable接口,定义AIDL接口及其实现,以及客户端如何绑定服务并进行数据交换。步骤涵盖服务端部署和客户端的配置,最终展示了实际效果。
摘要由CSDN通过智能技术生成

大家都知道在Android中通过AIDL可以跨进程调用Service中的数据,网上也有很多实例,但是大部分实例都是关于基本数据类型的远程调用,很少讲到复杂数据的调用,今天我用一个例子来演示一下怎样用AIDL Service 传递复杂数据。

我们分2步开始:

第一步:部署我们的服务端,也就是Service端:

1:在Service端我先自定义2个类型:Person和Pet。因为我们需要跨进程传递Person对象和Pet对象,所以Person类和Pet类都必须实现Parcelable接口,并要求在实现类中定义一个名为CREATER,类型为Parcelable.creator的静态Field。

代码如下:

复制代码
  1 package com.example.remoteservice;
  2 
  3 import android.os.Parcel;
  4 import android.os.Parcelable;
  5 
  6 public class Person implements Parcelable {
  7     int id;
  8     String name;
  9     String pass;
 10 
 11     public Person() {
 12 
 13     }
 14 
 15     public Person(int id, String name, String pass) {
 16         this.id = id;
 17         this.name = name;
 18         this.pass = pass;
 19     }
 20 
 21     @Override
 22     public boolean equals(Object o) {
 23         if (this == o) {
 24             return true;
 25         }
 26         if (o == null) {
 27             return false;
 28         }
 29 
 30         if (getClass() != o.getClass()) {
 31             return false;
 32         }
 33         Person other = (Person) o;
 34 
 35         if (name == null) {
 36             if (other.name != null) {
 37                 return false;
 38             }
 39         } else if (!name.equals(other.name)) {
 40             return false;
 41         }
 42 
 43         if (pass == null) {
 44             if (other.pass != null) {
 45                 return false;
 46             }
 47         } else if (!pass.equals(other.pass)) {
 48             return false;
 49         }
 50 
 51         return true;
 52     }
 53 
 54     @Override
 55     public int hashCode() {
 56         final int prime = 31;
 57         int result = 1;
 58         result = prime * result + (name == null ? 0 : name.hashCode());
 59         result = prime * result + (pass == null ? 0 : pass.hashCode());
 60         return result;
 61     }
 62 
 63     @Override
 64     public int describeContents() {
 65 
 66         return 0;
 67     }
 68 
 69     @Override
 70     public void writeToParcel(Parcel arg0, int arg1) {
 71         arg0.writeInt(id);
 72         arg0.writeString(name);
 73         arg0.writeString(pass);
 74     }
 75 
 76     public static final Parcelable.Creator<Person> CREATOR = new Creator<Person>() {
 77 
 78         @Override
 79         public Person createFromParcel(Parcel source) {
 80 
 81             return new Person(source.readInt(), source.readString(), source.readString());
 82         }
 83 
 84         @Override
 85         public Person[] newArray(int size) {
 86 
 87             return new Person[size];
 88         }
 89     };
 90 
 91     public int getId() {
 92         return id;
 93     }
 94 
 95     public void setId(int id) {
 96         this
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值