Android操作系统中有哪些可用的IPC机制?


Answers:


94

IPC是进程间通信。它描述了不同类型的android组件彼此通信所使用的机制。

1)Intents是组件可以发送和接收的消息。它是在进程之间传递数据的通用机制。在意图的帮助下,人们可以启动服务或活动,调用广播接收器等。

2)Bundles是传递的数据的实体。它类似于对象的序列化,但是在android上要快得多。可以通过该getExtras()方法从意图中读取捆绑。

3)Binders是允许活动和服务获得对另一服务的引用的实体。它不仅允许将消息发送到服务,还可以直接在服务上调用方法。


universal mechanism是通过...什么来实现的 (期望内核系统调用,在dalvik中找到的Java扩展名等)
n611x007

7
Bundle可以看作是Intent附带的,不要忘了BroadcastReceiver。这是来自Android官方页面的文字:“我们强烈建议您改用IPC的Android系统功能,例如Intent,具有服务的Binder或Messenger和BroadcastReceiver”。developer.android.com/training/articles/security-tips.html#IPC
Sam003,2015年

1
有人可以添加示例吗?如果每种IPC类型都有用例,新手会更快地理解它。
guettli 2015年

different types of android components或不同类型的Android流程?
Yousha Aleayoub

39

Android中有三种IPC机制:

  1. 意图(以及捆绑包)
  2. 黏合剂
  3. ASHMEM(匿名共享内存)-Linux共享内存和此共享内存之间的主要区别在于,在Linux中,其他进程无法释放共享内存,但是在这里,如果其他进程需要内存,则可以由Android OS释放该内存。

1
AIDL不进来吗?
Raa 2013年

3
粘合剂包括AIDL。它只是一种语言,可以帮助您生成IPC的Binder接口。
sweisgerber.dev

仅在知道自己在做什么时才使用ASHMEM。不保证不同android版本之间的兼容性。
DavidBurström2013年

3
应该添加UNIX套接字和管道
aberaud

内容提供商和广播呢?
Mit_


21

在这篇文章中,所有答案都是简洁明了的。但是我想介绍一下我们应该使用哪种IPC机制。首先,这IPC意味着Inter Process communication两个应用程序或进程之间通过在它们之间传递一些数据来相互通信。由于android适用于嵌入式和小型设备,因此我们不应该将其serialization用于IPC,而可以BINDERs在内部使用parcelsParcel是一种使用共享内存概念的轻量级序列化。

活页夹IPC和序列化IPC之间有很多区别:

1.序列化在嵌入式设备中使用非常繁重,通信将非常缓慢。

2. Binders使用包裹使IPC变得非常快。

3.绑定程序内部使用共享内存概念,该概念在两个进程之间共享数据时使用较少的内存。

底线: Binders使用更少的内存,并且由于使用包裹而非常快。Serialization与绑定程序相比,它非常繁重,需要花费一些时间来发送和接收数据,并且还需要更多的内存。

注意:要在活动,服务和接收者之间传递数据,请仅使用Bundles。不要进行序列化或绑定程序。绑定程序仅用于两个进程将进行通信的绑定程序服务。

希望这可以帮助 :)


6

IPC机制分为三种:

  1. 处理程序
  2. 实施粘合剂
  3. 图书馆

1
处理程序不是。信使是。
约翰,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.