Сохранить кеш при повороте устройства - PullRequest
0 голосов
/ 15 июля 2010

У меня есть Gallerywiew.

Я использую lazyload для загрузки изображений, но когда я поворачиваю устройство, оно перезагружает все изображения и не использует кеш.

Если яdo android:configChanges="keyboardHidden|orientation" текущие изображения имеют размер последней ориентации.

Чтобы изображения отображались в полном размере, я делаю:

Display display = ((WindowManager)getSystemService(Context.WINDOW_SERVICE))
                           .getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();

Ответы [ 3 ]

7 голосов
/ 15 июля 2010

Переопределение onConfigurationChanged () не рекомендуется, потому что для правильной работы нужно сделать так много.

То, что вы хотите сделать, это реализовать onRetainNonConfigurationInstance () в вашей деятельности. Это вызывается как раз перед тем, как ваша активность прекращается, когда система знает, что через мгновение перезапустит ее (например, для поворота экрана).

Ваша реализация onRetainNonConfigurationInstance () может вернуть любой понравившийся объект («this» - хороший выбор, или, в вашем случае, ваш кеш). Этот объект будет удерживаться и доступен для следующего вызова вашей активности.

В вашем методе onCreate () вызовите getLastNonConfigurationInstance (), чтобы получить объект, который система сохраняет для вас. Если эта функция возвращает ноль, действуйте как обычно. Если он возвращает ненулевое значение, то это будет объект, который вы ранее передали обратно из onRetainNonConfigurationInstance (), и вы можете извлечь из него любую информацию, какую захотите. Как правило, это означает, что вам ничего не нужно из комплекта saveInstanceState или из сохраненных настроек.

Я полагаю, что таким образом даже открытые сокеты, запущенные потоки и другие объекты могут быть сохранены при изменениях конфигурации.


Добавление: если вы делаете , проходите this через onRetaineNonConfigurationInstance (), не держитесь за него. Вы сохраните огромное количество ресурсов от освобождения. Извлеките нужную информацию и затем отпустите ее.

1 голос
/ 15 июля 2010

Вам необходимо переопределить событие onConfigurationChanged.

В моем приложении я проигрывал музыку, и когда вы щелкали телефон, он останавливался, а потом я обнаружил, что если я отменяю изменение конфигурации, я могу просто сказать ему, чтобы снова запустить таймер, и ничего не пропало. Я знаю, что это именно то, что вы хотели, но это может помочь вам двигаться в правильном направлении.

 @Override
             public void onConfigurationChanged(Configuration newConfig) {
               super.onConfigurationChanged(newConfig);
              startTimer();

             }
0 голосов
/ 15 июля 2010

Когда вы поворачиваете экран, вы проходите жизненный цикл действия.Действие проходит через onDestroy () и вызывается его метод onCreate ().Вы должны повторить все расчеты отображения и просмотреть изменения в onCreate и использовать saveInstanceState для сохранения данных приложения.

Надеюсь, это то, что вы спрашивали

...