К сожалению, использование 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 (и связи с моей деятельностью).Таким образом, при повороте экрана новое созданное действие возвращает соединение, управляемое синглтоном, и может использовать его без потери информации.