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 类的开发者,不必顾虑多线程冲突的安全议题,减轻开发者的负担。