Как обрабатывать привязку службы aidl при изменении ориентации

#android #android-service #aidl #android-service-binding

#Android #android-сервис #aidl #android-привязка службы

Вопрос:

Я создаю приложение (службу aidl), которое будет вызываться с помощью кода в Activity (Activity будет написан кем-то другим, и я не могу его контролировать).

Activity создает привязку к сервису, вызывает методы в сервисе и возвращает результат с помощью обратных вызовов.

Если ориентация действия изменится, ему придется снова привязаться к службе, но предыдущие обратные вызовы будут потеряны.

Каков наилучший способ обработки изменений ориентации активности в привязанном сервисе.

Ответ №1:

Несколько вариантов, в зависимости от ситуации:

1) Измените Activity ориентацию дескриптора самостоятельно, вместо того чтобы Android уничтожать и воссоздавать Activity . Если Activity имеет много состояний, то это часто полезно делать в любом случае.

2) Убитая Activity передача Binder (ссылка на Service ) вновь созданной Activity . Это можно сделать с помощью NonConfigurationInstance .

3) Сохраните Binder (ссылку на Service ) в static переменной, к которой можно получить доступ из любого класса (это может вызвать утечки памяти, но обычно относительно безопасно).

4) После успешной повторной привязки Service может отправить обратно все свое текущее «состояние» в новое Activity (чего может быть достаточно, в зависимости от того, для чего вы используете обратные вызовы).