AIDL实现跨进程通信最小代码

说明

这个是我随意写的一个AIDL跨进程通信的demo。对于初学者来说需要注意的地方有以下几点:

一个应用开启多个进程

代码位置 AndroidManifest.xml
用android:process属性让service运行在另一个进程中。

   <service
            android:name="com.renwj.bindertest.server.BinderServer"
            android:process="com.remote.server" >
   service>

AIDL代码注意事项

1,AIDL文件名就是接口的名称
2,AIDL支持的数据类型:

Java基本数据类型(int long char boolean double)
String 和 CharSequence
HashMap 成员必须满足AIDL数据类型
ArrayList 成员必须满足AIDL数据类型
Parcelable 所有实现了Parcelable的接口

3,AIDL会在gen目录中自动生成java文件

连接过程

1,通过ServiceConnection把接口映射给Activity中

 private IminiInterface iService;
 private ServiceConnection mConnection = new ServiceConnection()
    {
        @Override
        public void onServiceDisconnected(ComponentName name)
        {
            Log.i(TAG, "disconnect service");
        }

        @Override
        public void onServiceConnected(ComponentName name, IBinder service)
        {
            iService = IminiInterface.Stub.asInterface(service);
            mHandler.sendEmptyMessage(100);
        }
    };

2,通过bindService函数把接口的实现函数链接给Activity

private void bindService()
    {
        Intent intent = new Intent();
        intent.setClass(this, BinderServer.class);
        startService(intent);
        bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
    }

获取代码

AIDLDemo github地址
也可以直接复制

https://github.com/yolandank/AIDLDemo

你可能感兴趣的:(android)