-
Bundle
实现了 Parcelable 接口,三大组件(Activity、Service、Receiver)支持在Intent中传递 Bundle 数据。
-
文件共享
两个进程对同一个路径的文件进行读写以交换数据、或同一路径下的对象的序列化和反序列化操作。
-
Messenger
在不同进程中传递 Message 对象,在 Message 中放入需要传递的数据。底层是 AIDL。
-
AIDL
服务端: 1. 定义一个 Service 监听客户端的连接请求 2. 创建一个 AIDL 接口文件,暴露给客户端调用 3. 在 Service 中实现这个接口 Binder mBinder = new IAidlInterface.Stub(){ //实现方法 } 4. 在 onBind 中返回 mBinder对象 客户端: 1. 本地创建和服务端 aidl 文件所在路径相同的包名,将服务端的 aidl 文件复制进去,会自动生成 .aidl 所对应的 .java 文件 2. 绑定服务端的 Service 3. 绑定成功后,将服务端在 ServiceConnectuon 中返回的 IBinder 对象转成 AIDL 接口所属的类型,就可以调用 AIDL 中定义的方法 private ServiceConnection mConnection = new ServiceConnection(){ public void onServiceConnected(ComponentName className,IBinder serbice){ IAidlInterface aidlInterface = IAidlInterface.Stub.adInterface(service); aidlInterface.xxx(); //调用远程方法 } }
-
ContentProvider
- 底层也是 Binder
- onCreate()运行在主线程,不应该执行耗时操作,其余四个增删改查方法和getType方法运行在 Binder 线程池中
- 数据改变通知:ContentResolver 的 notifyChange 方法通知外界;
- 监听一个 ContentProvider 中的数据改变: ContentProvider.registerContentObserver注册观察者,unRegisterContentObserver 来解除观察者。
-
Socket
网友评论