Android 中的 IPC 方式

2018-09-05  本文已影响0人  _Sisyphus
  1. Bundle

    实现了 Parcelable 接口,三大组件(Activity、Service、Receiver)支持在Intent中传递 Bundle 数据。

  2. 文件共享

    两个进程对同一个路径的文件进行读写以交换数据、或同一路径下的对象的序列化和反序列化操作。

  3. Messenger

    在不同进程中传递 Message 对象,在 Message 中放入需要传递的数据。底层是 AIDL。

  4. 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(); //调用远程方法       
                 }
             
             }
    
  5. ContentProvider

    • 底层也是 Binder
    • onCreate()运行在主线程,不应该执行耗时操作,其余四个增删改查方法和getType方法运行在 Binder 线程池中
    • 数据改变通知:ContentResolver 的 notifyChange 方法通知外界;
    • 监听一个 ContentProvider 中的数据改变: ContentProvider.registerContentObserver注册观察者,unRegisterContentObserver 来解除观察者。
  6. Socket

上一篇 下一篇

猜你喜欢

热点阅读