ContentProvider против использования AIDL/Messenger

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

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

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

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

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

1 ответ

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

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

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

Другие вопросы по тегам