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进行管理。

它们的关系如图:

Android IPC的6种方式_第1张图片

注意:

一个线程对应一个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!

更多相关文章

  1. Android:Umeng(友盟)消息推送(二)
  2. Android输入法框架中按键消息的处理流程
  3. Android深入浅出系列课程---Lesson12 AFF110525_Android多线程系
  4. android学习笔记之多线程学习
  5. Android 创建桌面快捷方式
  6. Android AsyncTask两种线程池分析和总结

随机推荐

  1. Android(安卓)WebView封装及定制js的aler
  2. 【整理】android开源项目【项目篇】
  3. Android应用程序永久获取root权限方法
  4. windows 下 Android NDK开发配置(window +
  5. Android(安卓)常用Adapter(ArrayAdapter ,S
  6. Android(安卓)设置屏幕不待机
  7. android SQLite数据库总结
  8. android 基于BroadcastReceiver广播 完全
  9. android之意图
  10. Android Butterknife框架