ContentProvider 与使用 AIDL/Messenger

Posted

技术标签:

【中文标题】ContentProvider 与使用 AIDL/Messenger【英文标题】:ContentProvider vs. using AIDL/Messenger 【发布时间】:2012-03-10 03:04:09 【问题描述】:

我想开发一个支持插件并为这些插件提供数据的应用程序。在我看来,在 android 上实现这个插件架构的正确方法是主应用一个 apk,每个插件一个 apk。

但是由于主应用程序和每个插件都在不同的 apk 中,我无法轻松地将(数据)对象从一个应用程序传递到另一个应用程序,应用程序在不同的进程中运行,即使它们在一个进程中运行(可以是实现)他们有不同的类加载器,这不起作用。目前,我看到两种有前途的方法可以将数据从我的主应用程序获取到我的插件:

    将主应用程序声明为ContentProvider。在我看来,这似乎是预期的方法,因为它正是我想要实现的:向另一个进程提供内容/数据。 创建我的数据对象Parcelable 并使用AIDL 或-如果我不需要多线程-使用Messenger-方法来推动它们。在我看来,这种方法似乎更容易,因为我可以使用关心后台数据库的 ORM 库。我以前从未使用过 ContentProviders,但乍一看,我认为使用 ContentProvider 有点像手动构建 SQL 查询(如果我错了请告诉我),我想避免这项工作!李>

现在我想知道我是否遗漏了任何优点或缺点,以及这两种方法之间是否存在显着的性能差异。您更喜欢哪种解决方案?为什么要这样做?

提前致谢!感谢任何回复!

【问题讨论】:

【参考方案1】:

内容提供者只是在应用程序之间共享数据(以不同方式[数据库、文件等] 存储)的方式。如果您只想在应用程序之间共享数据,这是最好的方法。

但是,如果您希望服务使用数据执行某些任务(例如,将您提供的多个值相加),最好使用远程服务。

一般情况下,应用程序-插件交互更类似于远程服务。在这种情况下,主应用程序公开了一个远程服务(该应用程序的 API),插件可以使用该服务来执行某些操作。

【讨论】:

以上是关于ContentProvider 与使用 AIDL/Messenger的主要内容,如果未能解决你的问题,请参考以下文章

安卓IPC之aidl使用--aidl常见使用

Android IPC 之 AIDL

Android - IPC之ContentProvider简介

AIDL实现Android进程间通信实例

Android探索之AIDL实现进程间通信

Android Framework实战开发-Binder专题讲解之aidl文件的详细分析