ContentProvider против использования AIDL / Messenger - PullRequest
2 голосов
/ 10 марта 2012

Я хочу разработать приложение, которое поддерживает плагины и предоставляет данные для этих плагинов.Мне кажется, что правильный способ реализовать эту плагин-архитектуру на Android был бы один apk для основного приложения и один apk на плагин.

Но так как основное приложение и каждый плагин находятся в разных apks, я могунелегко передать (данные) объекты из одного в другой, приложения работают в разных процессах, и даже если они выполняются в одном процессе (что может быть достигнуто), у них разные загрузчики классов, и это не работает.В настоящее время я вижу два многообещающих подхода для получения данных из моего основного приложения в мои плагины:

  1. Объявление основного приложения как ContentProvider.Мне кажется, что это намеченный подход, потому что он делает именно то, чего я хочу достичь: предоставление контента / данных другому процессу.
  2. Создание моих объектов данных Parcelable и перемещение их с помощью AIDL или -если мне не нужна многопоточность - с Messenger -подходом.На мой взгляд, такой подход кажется более простым, потому что я могу использовать ORM-библиотеку, которая заботится о базе данных в фоновом режиме.Я никогда раньше не использовал ContentProviders, но при первом взгляде на него я подумал, что использование ContentProvider немного похоже на создание SQL-запросов вручную (скажите, пожалуйста, если я ошибаюсь), и я хотел бы избежать этой работы!

Теперь я хотел бы знать, пропустил ли я плюсы или минусы и есть ли заметные различия в производительности между этими двумя подходами.И какое решение вы бы предпочли и зачем вам это делать?

Заранее спасибо!Любые ответы приветствуются!

1 Ответ

4 голосов
/ 10 марта 2012

Контент-провайдер - это просто способ обмена данными (которые хранятся по-разному (база данных, файлы и т. Д.)) Между приложениями.Если вы хотите просто обмениваться данными между приложениями, это лучший способ сделать это.

Однако, если вы хотите, чтобы службы выполняли некоторые задачи с данными (например, суммировали несколько предоставленных вами значений), лучше иметьудаленный сервис.

В общем случае взаимодействие между приложением и плагином больше похоже на удаленный сервис.В этом случае основное приложение предоставляет удаленный сервис (API этого приложения), который может использоваться плагинами для выполнения некоторых действий.

...