У меня есть приложение для Android, в котором Activity запускает долго выполняющиеся операции, которые выполняются в фоновом режиме.Эти операции взаимодействуют с Действиями после их завершения.Я разрабатываю компонент, который обрабатывает соединение Activity / Long-Running-Task, заботясь об уничтожении и воссоздании действий.
Сейчас этот компонент реализован как сервис Android.Действия вызывают bindService и используют полученный IBinder для запуска и отслеживания задач.Я решил не использовать startService, потому что я предпочитаю более богатый API, возможный через интерфейс Java.
Теперь проблема.Активность А запускается, связывается с сервисом и вызывает serviceApi.runTask (...).Затем действие A уничтожается (например, если пользователь переворачивает телефон) и воссоздается как действие A '.Затем A 'снова связывается со службой, объявляет о ее существовании, и все должно работать хорошо.
За исключением того, что моя Служба разрушена.Когда действие A уничтожено, оно открепляется от сервиса.Android видит, что клиентов больше нет, и убивает сервис.Когда действие A 'создается, сервис создается снова, и я теряю все, что было у старого сервиса.
Единственное решение, которое я вижу, - это использование для сервиса синглтона.И тогда это не обязательно должен быть сервис Android, просто экземпляр, доступный каждому.Это осуждается в Android?Есть ли лучший дизайн, который подходит для этой проблемы?
Отредактировано: даже если я вызываю startService и затем привязываюсь к нему, ничто не гарантирует, что экземпляр службы будет существовать, пока приложение работает.Android может убить липкие сервисы, если ресурсов мало.Уничтожение службы приведет к сбоям в работе приложения, а я этого не могу.