AIDL大家都应该玩过吧,较大项目中,也是经常用到的。一个app的多进程架构,AIDL是必不可少的。
1、使用binder跨进程通信
先来一套代码。
https://github.com/wanjunfumy/BinderForAIDL 先运行服务端
https://github.com/wanjunfumy/BinderClient 再运行客户端。
a、服务端
package com.wanjf.baseVO;
import android.os.Parcel;
import android.os.Parcelable;
// 没啥好说的。
public class Person implements Parcelable {
private String name = "";
private String age = "";
private String sex = "";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
", sex='" + sex + '\'' +
'}';
}
public Person() {
}
public Person(String name, String age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
private Person(Parcel in) {
name = in.readString();
age = in.readString();
sex = in.readString();
}
public static final Creator<Person> CREATOR = new Creator<Person>() {
@Override
public Person createFromParcel(Parcel in) {
return new Person(in);
}
@Override
public Person[] newArray(int size) {
return new Person[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeString(age);
dest.writeString(sex);
}
}
package com.wjf.binderforaidl;
import com.wanjf.baseVO.Person;
/**
* 定义一个接口,这个不是必要的。只是为了舒服。
*/
public interface UserImpl {
Person getPerson(String name);
Person[] getPersons();
}
上面没啥好说的。随便看下就行。主要是下面的。
package com.wjf.binderforaidl;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.os.Binder;
import android.os.IBinder;
import android.os.Parcel;
import android.os.RemoteException;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat;
import com.wanjf.baseVO.Person;
public class UserService extends Service {
private