android - ContentProvider 与使用 AIDL/Messenger

标签 android ipc android-contentprovider aidl

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

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

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

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

提前致谢!任何答复表示赞赏!

最佳答案

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

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

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

关于android - ContentProvider 与使用 AIDL/Messenger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9643591/

相关文章:

java - android 发送消息存储失败

android - 我可以直接在 ContentProvider 的 open ParcelFileDescriptor openFile() 中传递我的 InputStream 吗?

Android in app billing,如何以美元获取价格

Android-调整图像大小以匹配屏幕高度

multithreading - 同一节点中MPI进程如何通信

python - 如何让两个python程序交互?

android - 在 Android 中优化现有搜索查询的结果

java - 公共(public)共享首选项导致应用程序崩溃

java - min3D 框架。物体旋转和移动

Perl:使用 IPC::Run 进行 I/O 重定向