Я пытаюсь работать, если связанная служба подходит для выполнения фоновой работы в моем приложении. Требования заключаются в том, что различные компоненты приложения могут передавать через него веб-запросы с различным приоритетом. (Таким образом, служба должна поддерживать какую-то очередь и иметь возможность отменить текущие запросы для других с более высоким приоритетом). Я хотел бы, чтобы служба была относительно ненавязчивой для пользователя, так что они не находят, что она работает после того, как они выполнены с приложением - если я хочу сделать что-то более важное, которое продолжается, пока приложение закрыто, я могу использовать startForeground (), чтобы нажать уведомление во время процесса.
Решение первое: привязка к активности
Итак, для данного компонента приложения он должен иметь возможность привязываться к службе, чтобы выполнить работу. Но, похоже, хорошо известная проблема: если активность выполняет привязку, привязка будет потеряна во время изменения конфигурации (вращения) по мере закрытия действия.
Итак, я подумал, что могу использовать другой контекст, который я создаю (new Context()
), и привязать его к этой службе, а затем использовать фрагмент без UI, чтобы поддерживать этот контекст в конфигурационных изменениях, пока не считаю, что я закончил с этим. Я мог бы сделать это только во время изменения конфигурации или в качестве постоянной альтернативы привязке к активности. (Я должен, вероятно, указать, что это стандарт и рекомендуется поддерживать экземпляры изменений в конфигурации)
Решение numero 2:
Основная альтернатива, которую я вижу, заключается в том, что я могу использовать контекст приложения для привязки, но может ли это продолжаться слишком долго? и/или могут ли быть некоторые циклические отношения между контекстом приложения и службой, тем самым предотвращая уничтожение службы и контекста приложения?
Вопросы:
Итак, вопрос, на который я пытаюсь ответить сам себе: должен ли я использовать первый метод (действия с временными контекстами)? Или второй (просто привяжите службу к контексту приложения)?
Я правильно понял, что контекст приложения может связываться с сервисом несколько раз, а затем отвязать от него столько же раз? (Например, вы можете иметь несколько допустимых привязок PER-контекст)?
Может ли использование моего собственного контекста (new Context()
) в первом решении вызвать какие-либо проблемы?
Edit
Найдена дополнительная информация: https://groups.google.com/forum/#!topic/android-developers/Nb58dOQ8Xfw
Также кажется, что будет сложно "создать" контекст произвольно, поэтому комбинация решений 1 и 2 кажется подходящей там, где соединение службы поддерживается во всех конфигурациях, но привязка к контексту приложения. Я по-прежнему обеспокоен возможностью отвязывания дважды из контекста приложения. Ведение подсчета привязок мне кажется ненужным - может ли кто-либо подтвердить/опровергнуть, что привязки относятся к соединению, а не к контексту?