Переопределение onConfigurationChanged () не рекомендуется, потому что для правильной работы нужно сделать так много.
То, что вы хотите сделать, это реализовать onRetainNonConfigurationInstance () в вашей деятельности. Это вызывается как раз перед тем, как ваша активность прекращается, когда система знает, что через мгновение перезапустит ее (например, для поворота экрана).
Ваша реализация onRetainNonConfigurationInstance () может вернуть любой понравившийся объект («this» - хороший выбор, или, в вашем случае, ваш кеш). Этот объект будет удерживаться и доступен для следующего вызова вашей активности.
В вашем методе onCreate () вызовите getLastNonConfigurationInstance (), чтобы получить объект, который система сохраняет для вас. Если эта функция возвращает ноль, действуйте как обычно. Если он возвращает ненулевое значение, то это будет объект, который вы ранее передали обратно из onRetainNonConfigurationInstance (), и вы можете извлечь из него любую информацию, какую захотите. Как правило, это означает, что вам ничего не нужно из комплекта saveInstanceState или из сохраненных настроек.
Я полагаю, что таким образом даже открытые сокеты, запущенные потоки и другие объекты могут быть сохранены при изменениях конфигурации.
Добавление: если вы делаете , проходите this
через onRetaineNonConfigurationInstance (), не держитесь за него. Вы сохраните огромное количество ресурсов от освобождения. Извлеките нужную информацию и затем отпустите ее.