Долгосрочная «служба» Android

У меня есть приложение для Android, в котором Activity запускают длительные операции, которые выполняются в фоновом режиме. операции взаимодействуют с Activity по завершении. Я разрабатываю компонент, который обрабатывает связь Activity / Long-Running-Task, заботясь об уничтожении и воссоздании действий.

Прямо сейчас этот компонент реализован как служба Android. действия вызывают bindService и используют полученный IBinder для запуска и отслеживания задач. Я решил не использовать startServ. ice, потому что я предпочитаю более богатый API, возможный через интерфейс Java.

Теперь проблема. Действие A запускается, связывается с сервисом и вызывает serviceApi.runTask (...). Затем действие A уничтожается (например, потому, что пользователь переворачивает телефон) и воссоздается как действие A '. Затем A 'снова привязывается к службе, объявляет о ее существовании, и все должно работать нормально.

За исключением того, что моя Служба уничтожается.Когда действие A уничтожается, оно отключается от службы. Android видит, что клиентов больше нет, и закрывает службу. Когда создается действие A ', служба создается снова, и я теряю все, что было у старой службы.

Единственное решение, которое я вижу, - это использование синглтона для службы. И тогда это не обязательно должна быть служба Android, просто экземпляр, доступный для всех. Это не одобряется в Android? Есть ли лучший дизайн, который подходит для этой проблемы?


Отредактировано: даже если я вызываю startService, а затем привязываюсь к нему, ничто не гарантирует, что экземпляр службы будет существовать, пока выполняется приложение. Android может убивать липкие сервисы, если ресурсов мало. Завершение работы службы вызовет сбой в работе приложения, а я не могу этого допустить.

5
задан zmbq 13 November 2011 в 19:36
поделиться