Я занимаюсь разработкой приложения для Android (если вам нужна дополнительная информация http://www.txty.mobi), и у меня возникли некоторые проблемы с управлением диалогами. Я совершенно новичок в Android, так что я делаю вещи совершенно неправильно.Если дело, пожалуйста, просто скажите так, указав мне правильную документацию, чтобы следовать.
Справочная информация:
Основными блоками приложения на данный момент являются одно действие и одна служба(который происходит от IntentService.) Actvity необходимо взаимодействовать со службой только в двух случаях: запускать / останавливать службу. Служба намерений самостоятельно регулирует свое время жизни с помощью AlarmManager.
Типичный потокпри нажатии на старт / стоп:
1) активность на своем onResume регистрирует широковещательный получатель на события, отправленные службой (отменяет регистрацию в onPause)
2) действие запускает диалоговое окно неопределенного прогресса
3) активация отправляет одноразовый сигнал тревоги (либо запуск, либо останов), которыйЯ буду отправлен ** прямо в службу
4) служба делает то, что нужно сделать, чтобы запустить
5) службаиспускает событие широковещания, в основном говоря: «выполнено»
6) , действие получает это событие и избавляется от диалога.
Проблема:
Деятельность может потерять свой приоритетный статус, скажем, если пользователь переключает фокус или получен вызов, поэтому вызывается метод onPause (в этом случаеукажите, что действие может даже быть уничтожено системой, чтобы потребовать память).очевидно, что в этом случае активность никогда не получит свое событие широковещания, потому что получатель был незарегистрирован.Это оставит приложение в неловкой ситуации, когда действие снова будет выведено на передний план, с диалоговым окном, которое вы не сможете убить или от которого никогда не избавитесь.
(Возможно??) решение:
Способ, которым я сейчас занимаюсь (за исключением сохранения приемника вещания на месте), заключается в создании вспомогательного класса, который использует предпочтения для отслеживания того, какие операции выполняются, и ихstatus:
Activity
- в onResume используя мой служебный класс, получаем список операций, которые ожидает операция
- проверить их статус
- если они выполнены, выполнить некоторые действия соответственно (в моем случае избавиться от диалога!)
- удалить операцию из настроек.- незадолго до запроса операции к службе она сохраняет ее по своему усмотрению, используя мой служебный класс.
Служба
выполняет операцию и сохраняет состояние операции в предпочтении, используя моюслужебный класс.излучать трансляцию.
Бедствия случаются!
Теперь это спасает меня в нормальной ситуации, но если произойдет сбой (то есть с приложением убийцы задач, которое вы убьете все), служба может бытьубит до того, как сможет сохранить состояние операции, в которой я застрял, как и раньше (операция будет думать, что операция все еще продолжается, поэтому не будет касаться диалога).Итак, на данный момент я добавляю кнопку Dismiss к самому диалогу на всякий случай :)
Теперь все это выглядит слишком сложным для того, что, я думаю, должно быть довольно распространенным делом.Вот почему, как сказано в начале поста, я могу (очень вероятно!) Быть совершенно не прав.
Есть идеи?Извиняюсь, если этот вопрос уже задавался, я огляделся, но ничего не нашел.Пожалуйста, укажите мне любой ресурс онлайн, объясняющий это.
Спасибо и простите за длинную запись: P
Luca