当前位置:K88软件开发文章中心编程语言APP编程Android01 → 文章内容

4.2.3 Service精通

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-12 6:26:15

Step 1:创建Person.aidl和Salary.aidl的文件,因为他们需要实现Parcelable接口,所以就下面一条语句:Person.aidl: parcelable Person; Salary.aidl: parcelable Salary; Step 2:分别建立Person类与Salary类,需实现Parcelable接口,重写对应的方法!PS:因为我们后面是根据Person对象来获取Map集合中的数据,所以Person.java中我们重写了hashcode和equals的方法;而Salary类则不需要!Person.java:package com.jay.example.aidl; import android.os.Parcel;import android.os.Parcelable;/** * Created by Jay on 2015/8/18 0018. */public class Person implements Parcelable{ private Integer id; private String name; public Person() {} public Person(Integer id, String name) { this.id = id; this.name = name; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public void setName(String name) { this.name = name; } public String getName() { return name; } //实现Parcelable必须实现的方法,不知道拿来干嘛的,直接返回0就行了 @Override public int describeContents() { return 0; } //写入数据到Parcel中的方法 @Override public void writeToParcel(Parcel dest, int flags) { //把对象所包含的数据写入到parcel中 dest.writeInt(id); dest.writeString(name); } //必须提供一个名为CREATOR的static final属性 该属性需要实现 //android.os.Parcelable.Creator<T>接口 public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() { //从Parcel中读取数据,返回Person对象 @Override public Person createFromParcel(Parcel source) { return new Person(source.readInt(),source.readString()); } @Override public Person[] newArray(int size) { return new Person[size]; } }; //因为我们集合取出元素的时候是根据Person对象来取得,所以比较麻烦, //需要我们重写hashCode()和equals()方法 @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Person other = (Person) obj; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; }}<pre><p><strong>Salary.java</strong>~照葫芦画瓢</p><pre>package com.jay.example.aidl; import android.os.Parcel;import android.os.Parcelable;/** * Created by Jay on 2015/8/18 0018. */public class Salary implements Parcelable { private String type; private Integer salary; public Salary() { } public Salary(String type, Integer salary) { this.type = type; this.salary = salary; } public String getType() { return type; } public Integer getSalary() { return salary; } public void setType(String type) { this.type = type; } public void setSalary(Integer salary) { this.salary = salary; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(type); dest.writeInt(salary); } public static final Parcelable.Creator<Salary> CREATOR = new Parcelable.Creator<Salary>() { //从Parcel中读取数据,返回Person对象 @Override public Salary createFromParcel(Parcel source) { return new Salary(source.readString(), source.readInt()); } @Override public Salary[] newArray(int size) { return new Salary[size]; } }; public String toString() { return "工作:" + type + " 薪水: " + salary; }}Step 3:创建一个ISalary.aidl的文件,在里面写一个简单的获取工资信息的方法:package com.jay.example.aidl; import com.jay.example.aidl.Salary; import com.jay.example.aidl.Person; interface ISalary { //定义一个Person对象作为传入参数 //接口中定义方法时,需要制定新参的传递模式,这里是传入,所以前面有一个in Salary getMsg(in Person owner); } ps:这里可以记得如果使用的是自定义的数据类型的话,需要import哦!!!切记!!!Step 4:核心Service的编写:定义一个SalaryBinder类继承Stub,从而实现ISalary和IBinder接口;定义一个存储信息的Map集合!重新onBind方法,返回SalaryBinder类的对象实例!AidlService.javapackage com.jay.example.aidl_complexservice; import java.util.HashMap; import java.util.Map; import com.jay.example.aidl.ISalary.Stub; import com.jay.example.aidl.Person; import com.jay.example.aidl.Salary; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.os.RemoteException; public class AidlService extends Service { private SalaryBinder salaryBinder; private static Map<Person,Salary> ss = new HashMap<Person, Salary>(); //初始化Map集

上一页  [1] [2] [3] [4] [5] [6]  下一页


4.2.3 Service精通