Подтвердить что ты не робот

Как имитировать убийство, чтобы сохранить память?

Android doc:

"Когда система, а не пользователь, отключает активность для сохранения памяти,..."

Но как имитировать эту ситуацию? Я хочу отлаживать метод onRestoreInstanceState(Bundle), но не знаю, как это сделать.

4b9b3361

Ответ 1

Вы не можете сделать это автоматическим способом b/c, полностью не детерминированным.

Подробнее см. мой ответ здесь: fooobar.com/questions/97106/....

Но хорошая новость заключается в том, что все, что вам нужно сделать, это просто имитировать вызов onSaveInstanceState, и вы косвенно проверяете эту ситуацию с низкой памятью.

onSaveInstanceState может быть вызван:

  • потерять фокус (нажав на дом, который по сути походит на переход с вашего приложения на приложение запуска), запуск другого действия, нажатие на кнопки
  • изменение ориентации. это проще, если вы используете эмулятор
  • изменение настроек разработчика: опции разработчика goto → Приложения → Не выполнять действия. Это лучший вариант, если вы временно тестируете фактическое устройство.

Ответ 2

Я использовал опцию разработчика "Не держу", чтобы воспроизвести крах, который произошел, когда активность была убита из-за давления памяти. Вы можете найти его в разделе Apps Settings->Developer Options.

Он уничтожает каждое действие, как только вы его покидаете. Например. если вы нажмете на дом, чтобы положить свое приложение в фоновом режиме, текущая активность будет уничтожена. Подробнее см. fooobar.com/questions/97122/....

Ответ 3

Существует два способа моделирования процесса убийства Android: с помощью параметра "Не выполнять действия" в настройках разработчика или самостоятельно уничтожить процесс приложения.

Чтобы убить процесс, откройте действие, которое вы хотите протестировать, затем нажмите кнопку "домой", чтобы отправить приложение в фоновом режиме, а затем, используя DDMS в Android Studio (Android Device Monitor), выберите процесс, а затем остановить процесс (как видно на изображении ниже). Ваше приложение было убито. Теперь откройте приложение снова (доступ к списку открытых приложений). Теперь вы можете проверить убитое состояние.

введите описание изображения здесь

Ответ 4

Для отладки onRestoreInstanceState() просто измените ориентацию экрана ([Ctrl] - [F11] в эмуляторе). Ваша активность будет уничтожена и воссоздана, и будет вызываться пара onSaveInstanceState()/onRestoreInstanceState().

Ответ 5

Используйте приложение SetAlwaysFinish (работает на реальном устройстве и в эмуляторе) или используйте приложение Google DevTools (работает только в эмуляторе).

Эти приложения используют скрытый параметр AlwaysFinish класса ActivityManagerNative для изменения поведения ОС и вызывают немедленную разгрузку каждого действия, как только он больше не находится на переднем плане. Это будет надежно запускать события onSaveInstanceState и onRestoreInstanceState.

Подробнее см. ссылку ниже: http://bricolsoftconsulting.com/how-to-test-onsaveinstancestate-and-onrestoreinstancestate-on-a-real-device/

Ответ 6

Чтобы отладить onRestoreInstanceState, вы можете сделать следующее:

  • убедитесь, что вы можете отлаживать приложение сразу после его запуска (вызов функции android.os.Debug.waitForDebugger() из вашего конструктора помогает, он зависает ваше приложение, пока не будет подключен отладчик),

  • поместите приложение в определенное состояние,

  • причинно убить его из настроек- > приложений,

  • причинно вернуться к нему с помощью кнопки Recent Apps (она все равно будет в списке),

  • в этот момент ваше приложение будет запущено заново, и onRestoreInstanceState будет немедленно вызван в верхнюю активность.

Ответ 7

Хорошие ответы здесь.

Теперь, находясь в отдаленном будущем, использование Instant Run в Android Studio также инициирует сохранение и восстановление, когда действия перезапускаются с изменениями кода.