Bootstrap

深入Android架构(从线程到AIDL)_25 Messager框架与IMessager接口01

1、 Messenger的概念和角色

同一进程
  • myActivity和myService两者执行于同一的进程里(IPC)
  • myActivity的线程想丢信息(Message)给myService的主线程
  • 多条并行(Concurrently)的小线程丢信息到myService主线程的MQ,
  • 变成同步(Synchronized)的调用myService的handleMessage()函数。
不同进程
  • myActivity和myService两者执行于不同的进程里(IPC)
  • myActivity的线程想丢信息(Message)给myService的主线程

       

         

      

  • Messenger类来扩充IBinder接口机制,让其能跨进程地将Message对象传递到另一个进程里,给其主线程(又称UI线程)。
  • 由于Message类实作(Implement)了Parcelable接口,所以Messenger类可以透过IBinder接口而将Message对象传送到另一个进程里的MessengerImpl类。
  • 然后,透过Handler而将Message对象丢入UI线程的MQ里,让UI线程来处理之。
  • 由于是同步(依序)处理信息,所以myService 类的开发者,不必顾虑多线程冲突的安全议题,减轻开发者的负担。
目的与方法
  • 目的: myActivity方的多个线程想丢信息给远程的myService的线程
  • 方法: 使用Messager类包装IBinder接口,将信息丢入myService主线程的MQ里。然后,由myService主线程同步(依序)处理这些信息
  • 在学习Android的AIDL时,通常会从Android 说明文件里看到如下的说明:

        

                

  • 这短短的几句话,让一些初学者满头雾水,因为其中牵涉到多线程(multithreading)和IPC跨进程的环境。其中, Android文件又说明道:

        

  • 这适用于跨进程的IPC沟通,可让双方透过Messenger来传递Message对象。
  • 同一进程由于是同步(依序)处理信息,所以myService 类的开发者,不必顾虑多线程冲突的安全议题,减轻开发者的负担。
     
;