Как мне сделать это способом Android?
Вы предполагаете, что существует единственный "путь Android".
Должен ли я связывать и отменять привязкув службу обработки данных, которую я могу активно запрашивать для извлечения определенных данных?
Вы можете либо связывать, либо отправлять команды через startService()
.
Должен ли я делать своинепостоянное кэширование в этом сервисе или где-то еще?
Если вы уверены, что хотите, чтобы оно было только в ОЗУ, я бы склонялся к статическим элементам данных.Сделайте службу «делателем», а не хранилищем.
При этом я бы отнесся к этому больше как к шаблону синхронизации, а реальное хранилище - это база данных или каталог с кешем вБАРАН.Пользователи сочтут это менее расстраивающим - по вашему текущему плану, если они включены в ваше приложение, а затем на некоторое время позвоните, им потребуется, чтобы вы снова загрузили все данные.
Нужна ли мне AIDL, или я могу просто использовать обычные объекты для перемещения данных между службой и действием?
Если все они находятся в одном и том же процессе, нормальные объекты в порядке с помощью связывания или использованияIntent
дополнения для шаблона команды.
Теперь вернемся к:
Как мне сделать это способом Android?
Вариант № 1: оберните свой магазин в ContentProvider
и используйте ContentObserver
для изменений.
Вариант № 2: ваша служба отправит широковещательную рассылку в ваш пакет при изменении данных, чтобы на переднем плане можно было найтиоб изменениях через BroadcastReceiver
, зарегистрированных через registerReceiver()
.Другие действия просто берут новый взгляд на данные в onResume()
- единственное, что нужно немедленно знать об изменении данных, это то, с чем взаимодействует пользователь, если таковые имеются.
Вариант № 3:Используйте шаблон привязки со службой, и пусть основной вид деятельности зарегистрирует слушателя в службе.Служба вызывает слушателя при обновлении данных.Еще раз, другие действия просто берут новый взгляд на данные в onResume()
Вариант № 4: Создайте свою собственную систему слушателя как часть ваших статических членов данных, очень и очень осторожно, чтобы избежать утечек памяти (например, статическая ссылка на действие или службу, которая уничтожена, что препятствует ее сборке мусора).
Возможно, есть другие варианты, но это должно помочь вам начать работу.