一.截图

二.服务端

1.新建aidl文件夹

2.新建aidl文件(因为传递的是自定义类型,所以必须写个以类型命名的aidl文件)

注意:a.这里必须导入自定义类型,要不然不识别

          b.形参必须指定in或者out

IMyAidlInterface.aidl
// IMyAidlInterface.aidlpackage com.caomingyu.parcelableserver;import com.caomingyu.parcelableserver.Person;// Declare any non-default types here with import statementsinterface IMyAidlInterface {    List addPerson(in Person person);}
Person.aidl
// Person.aidlpackage com.caomingyu.parcelableserver;// Declare any non-default types here with import statementsparcelable Person;

3.写自定义实体类

package com.caomingyu.parcelableserver;import android.os.Parcel;import android.os.Parcelable;/** * Created by caomingyu on 2018/11/20. */public class Person implements Parcelable {    private String name;    private int age;    public Person(Parcel in) {        name = in.readString();        age = in.readInt();    }    public Person(String name, int age) {        this.name = name;        this.age = age;    }    public static final Creator CREATOR = new Creator() {        @Override        public Person createFromParcel(Parcel in) {            return new Person(in);        }        @Override        public Person[] newArray(int size) {            return new Person[size];        }    };    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    @Override    public int describeContents() {        return 0;    }    @Override    public void writeToParcel(Parcel dest, int flags) {        dest.writeString(name);        dest.writeInt(age);    }    @Override    public String toString() {        return "{ name = " + name + " , age = " + age + "}";    }}

4.新建service文件

IRemoteService.java
package com.caomingyu.parcelableserver;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.os.RemoteException;import android.support.annotation.Nullable;import android.util.Log;import java.util.ArrayList;import java.util.List;/** * Created by caomingyu on 2018/11/20. */public class IRemoteService extends Service {    private List personList;    @Nullable    @Override    public IBinder onBind(Intent intent) {        personList = new ArrayList();        return iBinder;    }    private IBinder iBinder = new IMyAidlInterface.Stub() {        @Override        public List addPerson(Person person) throws RemoteException {            Log.d("personList", "addPerson: " + personList.toString());            personList.add(person);            return personList;        }    };}

5.在mainactivity文件里启动该service

package com.caomingyu.parcelableserver;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.Button;public class MainActivity extends AppCompatActivity {    private Intent intent;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        intent = new Intent(MainActivity.this, IRemoteService.class);        startService(intent);    }    @Override    protected void onDestroy() {        super.onDestroy();        stopService(intent);    }}

6.在manifest里面注册IRemoteService

<?xml version="1.0" encoding="utf-8"?>                                                                                        

三.客户端

1.把服务端的两个aidl文件拷贝过来,跟服务端内容和包名必须一致

2.布局文件写好

<?xml version="1.0" encoding="utf-8"?>    

3.把服务端自定义Person类拷贝下来放到与服务到一致的包名下

4.在mainactivity实现与服务端的远程通信

package com.caomingyu.parcelableclient;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import android.os.IBinder;import android.os.RemoteException;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import com.caomingyu.parcelableserver.IMyAidlInterface;import com.caomingyu.parcelableserver.Person;public class MainActivity extends AppCompatActivity {    private Button mBtAddPerson;    IMyAidlInterface iMyAidlInterface;    private ServiceConnection conn = new ServiceConnection() {        @Override        public void onServiceConnected(ComponentName name, IBinder service) {            iMyAidlInterface = IMyAidlInterface.Stub.asInterface(service);        }        @Override        public void onServiceDisconnected(ComponentName name) {            iMyAidlInterface = null;        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();        bindService();    }    private void bindService() {        Intent intent = new Intent();        ComponentName componentName = new ComponentName("com.caomingyu.parcelableserver","com.caomingyu.parcelableserver.IRemoteService");        intent.setComponent(componentName);        bindService(intent, conn, Context.BIND_AUTO_CREATE);    }    private void initView() {        mBtAddPerson = (Button) findViewById(R.id.bt_add_person);        mBtAddPerson.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                try {                    iMyAidlInterface.addPerson(new Person("lisan",12));                } catch (RemoteException e) {                    e.printStackTrace();                }            }        });    }}

server端github地址: https://github.com/bruse1990/AidlParcelable

client端github地址:https://github.com/bruse1990/ParcelableClient

更多相关文章

  1. JNI综合实验一:LED点亮+IO电平读取
  2. View编程(5): 自定义View_01_ApiDemo源码研究
  3. 简单实现Android文件上传
  4. PhoneGap0.9.5 for Android源码
  5. Android实现简单的电子词典
  6. (Linux平台)在Android中调用JNI
  7. [转]Android(安卓)中Preferences的使用
  8. android jni 使用流程
  9. android简单实例---------SharedPreferences的简单使用与讲解

随机推荐

  1. Python办公自动化|批量提取Excel数据
  2. 自学第五十三天
  3. 腾讯微博即将退出舞台,爬取近十年腾讯微博
  4. 办公族该如何防止"鼠标手"
  5. 维度爆炸?Python实现数据压缩竟如此简单!
  6. 1-19学习心得
  7. 10行Python代码自动清理电脑内重复文件,解
  8. NumPy学的还不错?来试试这20题!
  9. 这样用Excel动态交互图表,还要什么前端?
  10. 扫雷的部分实现