У меня есть сложное приложение, в котором есть фоновые потоки (которые могут быть в службе), которые, когда они получают данные из Интернета, должны уведомлять меня об основной активности отображения (чтобы обновить некоторые индикаторы состояния). Все запускаются в одном и том же процессе (я не вижу причин делать иначе).
Однако в некоторых случаях эти события происходят часто - 5 в секунду. Кроме того, события могут происходить, когда активность невидима или даже уничтожена. Я думаю, что единственным вопросом в этом вопросе является вопрос эффективности. Я все еще нацеливаюсь на G1, например.
Есть ряд методов, упомянутых в этой теме , но я не знаю, какие из них достаточно эффективны, и будут работать, если действие будет уничтожено. Эти методы являются «способом Android», которому я бы предпочел следовать.
У меня есть три уродливых способа против Android, которые работают, но у них также есть недостатки:
- В действии есть поток, ожидающий семафор, и после освобождения выполняет обновление. Недостатки: дополнительный поток, как обрабатывать несколько типов событий
- Как и # 1, но использовать объект очереди одновременной блокировки. Недостатки: дополнительный поток, один и тот же тип события может несколько раз попадать в очередь (не хорошо)
- Сохраняйте статическую ссылку на обработчик в действии и используйте его для запуска средства обновления. Недостатки: (а) может утечка ссылки на деятельность? (б) что происходит, когда активность меняет состояние? (c) несколько исполняемых объектов могут оказаться там, когда нужен только один.