ContentProvider与使用AIDL / Messenger

时间:2012-03-10 03:04:09

标签: android ipc android-contentprovider aidl

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

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

  1. 将主应用宣布为ContentProvider。在我看来,这似乎是预期的方法,因为它完全符合我的要求:向另一个流程提供内容/数据。
  2. 制作我的数据对象Parcelable并使用AIDL推送它们,或者 - 如果我不需要多线程 - 使用Messenger - 方法。在我看来,这种方法似乎更容易,因为我可以在后台使用一个关心数据库的ORM库。我以前从未使用过ContentProviders但是第一次看它时我认为使用ContentProvider有点像手工构建SQL-Queries(请告诉我,如果我错了),我想避免这项工作!
  3. 现在我想知道我是否错过了任何利弊,以及这两种方法之间是否存在显着的性能差异。您更喜欢哪种解决方案,为什么会这样做?

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

1 个答案:

答案 0 :(得分:4)

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

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

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