Поддержание ServiceConnection в Android через изменения ориентации - PullRequest
1 голос
/ 06 декабря 2010

У меня есть Activity, которая содержит ServiceConnection к Сервису.Когда ориентация меняется, ServiceConnection теряется и создается заново.

Это нежелательно.Я бы хотел, чтобы это было так, чтобы ServiceConnection поддерживался посредством воссоздания Activity.Я ищу хороший шаблон, который решает эту проблему.

Ответы [ 3 ]

1 голос
/ 24 января 2012

К сожалению, использование onRetainNonConfigurationInstance / getLastNonConfigurationInstance может привести к утечкам.В моем случае (я использую IntentService для загрузки файла на удаленный сервер), я объявил свое соединение в рассматриваемой операции, такой как:

private ServiceConnection mConnection = new ServiceConnection() {
    public void onServiceConnected(ComponentName className, IBinder service) {
        mServiceMessenger = new Messenger(service);
        mConnectedToService = true;
    }

    public void onServiceDisconnected(ComponentName className) {
        mConnectedToService = false;
        mServiceMessenger = null;
    }
};

mServiceMessenger - это экземпляр Messenger, который позволяет мнеотправить запрос на отмену в задачу загрузки.

Тем не менее, когда я тестировал решение с использованием onRetainNonConfigurationInstance и getLastNonConfigurationInstance, я обнаружил (благодаря подключаемому модулю MAT в Eclipse), что поворот экрана включает много утечек из моегоКонтекст действия.

Чтобы решить эту проблему (и поскольку сложность моего приложения позволяет мне это делать), я создал одноэлементную группу, объединяющую все элементы, необходимые для обработки соединения с моим IntentService (и связи с моей деятельностью).Таким образом, при повороте экрана новое созданное действие возвращает соединение, управляемое синглтоном, и может использовать его без потери информации.

1 голос
/ 06 декабря 2010

Посмотрите на Activity.onRetainNonConfigurationInstance () и связанные методы getLastNonConfigurationInstance () - они могут быть полезны.

0 голосов
/ 06 декабря 2010

Использование android: configChanges = "direction" в свойстве Activity в манифесте.

...