Решение очереди сообщений для действий, которые приходят и уходят на Android?

#android #message-queue #android-service

#Android #очередь сообщений #android-сервис

Вопрос:

Допустим, у меня есть служба S и действие A. S загружает данные для A (или выполняет какую-то длительную работу, что угодно), но A присутствует не всегда. Я не хочу, чтобы S зависал, когда очередь заданий пуста: S должен отправлять результаты завершенных работ в какой-то почтовый ящик для A, чтобы A мог извлекать сообщения, когда он вернется снова.

Можно ли этого достичь без использования SQLite файлового хранилища для реализации почтового ящика? Я бы предпочел какой-нибудь более быстрый механизм, операции записи, как правило, выполняются довольно медленно на устройстве. Я думал об использовании простого статического списка внутри ApplicationContext, но afaik, полагающийся на ApplicationContext, приводит к рискованному / хрупкому решению.

Кто-нибудь может порекомендовать шаблон для решения этой проблемы?

Ответ №1:

Можно ли этого достичь без использования SQLite файлового хранилища для реализации почтового ящика?

Ненадежно. Либо это файл, либо он может быть уничтожен до того, как A вернется снова. Помните, что ваш процесс, в котором находятся все ваши статические элементы данных и Application объект, не живет вечно. Как только S завершит работу (что хорошо, спасибо!), Android может завершить процесс, забрав с собой ваш «почтовый ящик», если он находится только в оперативной памяти.

Вы могли бы сохранить его на диске, но сохранить синглтон или что-то еще в качестве кэша, поэтому, если A возвращается быстро, вы можете пропустить некоторые операции ввода-вывода. Или, если на самом деле не имеет большого значения, существуют ли сообщения для A, вы могли бы сохранить их в оперативной памяти и просто пожать плечами, если процесс завершится первым.