Мероприятия должны обрабатывать изменения конфигурации, например, когда экран повернут или пользователь меняет локали, или устройство переходит в ночной режим.
Поведение по умолчанию для деятельности переднего плана при изменении конфигурации заключается в том, что оно будет уничтожено и воссоздано.
В результате, вызов bindService()
на Activity
- это не очень хорошая идея. Мы хотим, чтобы привязка оставалась неповрежденной при изменении конфигурации. В противном случае наша служба будет уничтожена и воссоздана вместе с активностью (при условии, что действие имеет единственную привязку и больше ничего не запускало сервис).
Итак, рекомендуемый образец - позвонить bindService()
на Application
singleton. Затем вы можете передать ServiceConnection
из старого экземпляра активности в новый экземпляр активности. Оставшиеся фрагменты отлично подходят для этого, так как вы можете вызвать unbindService()
в onDestroy()
фрагмента , так что, когда действие «постоянно» уничтожается (например, пользователь нажимает BACK, вы вызываете finish()
), ваша привязка может быть освобождена.
Со всем этим в качестве фона, на ваш вопрос.
Во-первых, вы предполагаете, что разрушенное действие автоматически отвязывает от любых служб, с которыми оно связано через bindService()
, вызванное этим Activity
. Возможно, это происходит, хотя я не помню, что это документированное поведение, и это то, на что разработчики не должны полагаться.
Что еще более важно, в большинстве случаев вызов bindService()
на Activity
не подходит. В противном случае вы столкнетесь с проблемами, описанными выше.
Но после созывающих bindService()
-она-в- Application
узора, я не ожидаю, что когда-либо быть каким-то автоматическая развязывание, потому что Application
одноточечно никогда не разрушаются. Таким образом, если вы не можете позвонить unbindService()
где-нибудь (например, в onDestroy()
сохраненного фрагмента), вы пропустите свою службу.
Поддерживает ли 'Сервис', кто его ограничил? Я так не думаю. Если служба была ограничена n раз, она должна быть неограниченной примерно n раз, чтобы полностью остановиться. Итак, если вы не отвязываете, когда действие уничтожается, как теперь у службы нет активных привязок? Он будет работать в течение нескольких минут. Поправьте меня если я ошибаюсь. – azizbekian
см. [Дополнительные примечания] (https://developer.android.com/guide/components/bound-services.html#Additional_Notes) – pskink
@azizbekian Я предположил, что он автоматически отключается путем уничтожения связующего. Но я могу ошибаться. – ispiro