Android IPC的6种方式
Android中的跨进程通信大体有6中方式,
1、Handler + Looper(子线程与UI线程之间的通信)
2、Activity(显示启动和隐式启动)
3、ContentProvider(数据存储和数据共享)
4、BroadcasrReceiver(系统广播和自定义广播)
5、Service(startService和bindService)
6、aidl (跨进程间通信,使用bindService得到binder对象,才能调用远程接口)
在使用上面的区别:
方式 | 同一个APK | 跨APK | 传数据 | 共享接口 |
Handler+Looper | Yes | NO | Yes | NO |
Activity | Yes | Yes | Yes | NO |
ContentProvider | Yes | Yes | Yes | NO |
BroadcastReceiver | Yes | Yes | Yes | NO |
Service | Yes | Yes | Yes | NO |
AIDL | Yes | Yes | Yes | Yes |
1、Handler+Looper机制
Message:消息。其中包含了消息ID,消息处理对象以及处理的数据等等,由于Message Queue管理,最后由Handler进行处理。
Handler:处理者。负责Message的发送及处理。使用Handler时,需要实现handlerMessage方法,来对特定的Message进行处理,如更新UI。
MessageQueue:消息队列。用来存放Handler发送过来的消息,并且按照FIFO规则执行。当然存放Message并非实际的存放,而是用链表的形式存放,等等Looper的抽取。
Looper:消息泵。不断地从MessageQueue中抽取Message并且发送给Handler进行处理,因此一个MessageQueue需要一个Looper进行管理。
它们的关系如图:
注意:
一个线程对应一个Looper,一个Looper对应一个MessageQueue,一个线程可以有多个Handler,由Looper对消息进行分发到Handler的handleMessage中处理。
用法:在开发中使用Handler+Looper的方式主要用于将子线程的操作结果反馈给主线程以便更新UI。
2、Activity
Activity在Android中的作用以及它的生命周期就不说了。这里只介绍它在数据传递上面的方式。Activity之间的数据传递主要是通过Intent.putXXX参数,传递到接收方。作为启动Activity的传递参数,不仅可以启动本apk中的activity,还可以启动另外apk中的activity。在启动方式上分为显式启动和隐式启动,显式启动就是在初始化Intent时指定目标activity的包名和类名。隐式启动就是通过指定目标activity的action属性(如果已指定并且是DEFAULT模式)来启动activity。
3、ContentProvider
Android中的内容提供者,主要用在不同apk之间数据共享。如android手机中的联系人等。
4、BroadcastReceiver
Android中的广播接收器,不断可以捕捉系统发出的广播也可以自定义广播的发送和接收。广播又分为常驻广播和非常驻广播,有序广播和无序广播。如果是自定义广播,需要自己定义Actiion。
5、Service
Android里面的Service在启动上有两种方式,一种是startService另外一种是bindService,对service的影响和方法执行也不一样。StartService时执行Service里onCommandStart方法,而bindService时执行的是onBind方法。在初始化Intent时跟启动Activity时初始化Intent差不多,有两种方式,指定全名或是指定Action但是如果是指定Action的话,此Service必须有DEFAULT属性,同样可以在Intent中putXXX给目标Service传参数。
6、AIDL
AndroidAIDL机制是跨进程之间通讯的方式,主要用在不同apk之间的通信。同一个apk中,没有必要用AIDL。至于通过AIDL来实现进程间的通信,网上很多例子。其核心的内容就是通过Binder!
更多相关文章
- Android:Umeng(友盟)消息推送(二)
- Android输入法框架中按键消息的处理流程
- Android深入浅出系列课程---Lesson12 AFF110525_Android多线程系
- android学习笔记之多线程学习
- Android 创建桌面快捷方式
- Android AsyncTask两种线程池分析和总结