1

Я пытаюсь смоделировать повторное создание активности и фрагментации, а также проверять onsaveinstancestate() и onRestoreInstanceState() и, как правило, проверить, правильно ли я обрабатываю повторное создание активности во всех случаях , например, так же, как при повороте экрана, что заставляет деятельность повторно создавать ее самостоятельно.Имитация активности/создания фрагмента

Но в моем случае я хочу проверить дополнительные параметры/случаи, которые могут вызвать повторное создание, потому что мое приложение не может вращаться (все действия в портрете).

Я видел много статей, блогов и StackOverflow вопрос/ответы по этой теме, например, http://android-er.blogspot.co.il/2013/04/simulate-kill-activity-to-test.html, How to simulate Android killing my process, How to simulate killing activity to conserve memory?.

И как сказано в ответах stackoverflow, Why not use always android:configChanges="keyboardHidden|orientation"? Есть еще много событий, которые могут вызвать повторное создание активности, поэтому после того, как я прочитал его, я захотел проверить свое приложение на некоторые из этих событий.

Например, я нажал кнопку «Домой» в своей деятельности, а затем включил параметры и попытался изменить язык, изменить размер шрифта и т. Д., Но не те действия, которые сделали мое приложение заново созданным, поскольку я ожидал бы. Когда я вернулся в свое приложение, он просто возобновился, а onCreate() никогда не звонил. Так что я даже проверить официальные документы по этому поводу - http://developer.android.com/guide/topics/manifest/activity-element.html#config, и они также говорят, что это должно привести к моей деятельности, чтобы воссоздавать: Цитирование:

"When a configuration change occurs at runtime, the activity is shut down and restarted by default" 

но, как я сказал, что это не случилось со мной.

Это я огромно для меня, потому что я был очень наивным и думал, что если мое приложение будет только в портретном или, если я добавлю в манифесте следующую строку:

android:configChanges="keyboardHidden|orientation|screenSize" 

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

+0

Как вы утверждаете, что ваша деятельность имеет или не вызвала CreateCreate? Отлаживать? LogCat? –

+0

Logcat - когда я нажимаю на домашнюю кнопку, вызывается onPause() -> onStop(). После моего теста (независимо от того, какой из них, например, меняет размер шрифта от обычного до огромного), я долго нажимаю кнопку «домой», а затем нажимаю на свое приложение, а затем onRestart() -> onStart() -> onResume() называются – Elizabeth

ответ

0

Вы сказали, что он не воссоздается, когда вы меняете ориентацию своего устройства в приложении. Обычно это было бы. Когда вы добавили строки android:configChanges="orientation", это означает, что вы сообщаете системе, что будете иметь дело с изменениями ориентации в своем приложении и не беспокоиться о нормальном поведении.

Если вы удалите это из декларации своей деятельности в манифесте, вы увидите, что он работает как ожидалось (уничтожение/воссоздание при изменении ориентации).

Надеюсь, что это поможет.

+0

Вы не поняли, что я написал, или я не был ясен, но я сказал, что намеренно сделал это, поэтому не будет никакой ориентации, поэтому моя деятельность не будет перезапущена/воссоздана, но после прочтения материала о проблеме я обнаружил что есть еще много случаев, которые могут воссоздать/перезапустить мою деятельность - пожалуйста, прочитайте снова то, что я написал, и посмотрите http://stackoverflow.com/questions/7818717/why-not-use-always-androidconfigchanges-keyboardhiddenorientation/7990543 # 7990543 – Elizabeth

+0

Я хочу, чтобы симулировать больше случаев изменения конфигурации, которые заставляют деятельность повторно создавать/перезапускать, не считая изменения ориентации. – Elizabeth

0

Нажатие кнопки «домой» только изначально приведет к появлению . Ваш Activity не будет проходить через onCreate, пока он не будет полностью уничтожен, чего не произойдет, если Android не решит, что ему нужна память для других процессов.

Самый простой способ - просто удалить orientation из configChanges, а затем повернуть Activity и посмотреть, что произойдет. Макеты могут работать некорректно, но вы должны проверить свой код жизненного цикла. Аналогичным образом удалите keyboardHidden, а затем переключите мягкую клавиатуру. Ваш Activity должен пройти последовательность жизненного цикла.

Изменение языкового стандарта для устройства должно привести к воссозданию Activity. Обратите внимание, что это глобальный язык, который должен быть изменен, не языка клавиатура печатает в.

Другие способы приходят на ум такие, как вручную уничтожив приложение либо с помощью последовательности клавиша на телефоне (например, , удерживая кнопку «Домой» и прокручивая влево приложение, чтобы убить на некоторых телефонах), или завершая его из вашего отладчика.

+0

Я хочу, чтобы симулировать больше случаев изменения конфигурации, которые заставляют деятельность повторно создавать/перезапускать, не включая изменение ориентации. Я также попытался изменить язык устройства, но он не воссоздал мою активность. Вы писали: «... что не произойдет, если Android не решит, что ему нужна память для других процессов», но это неверно, потому что, как говорит андроид, существует еще много случаев, которые могут вызвать повторную работу. Посмотрите здесь http://developer.android.com/guide/topics/manifest/activity-element.html#config – Elizabeth

+0

Если я задержу кнопку дома, а затем прокручу влево мое приложение, оно уничтожит процесс и мое приложение с ним , Я также могу использовать инструмент DDMS для имитации Android, который удаляет мое приложение из-за потери памяти, читайте это: http://stackoverflow.com/questions/11365301/how-to-simulate-android-killing-my-process. Я также могу имитировать это с помощью инструментов разработчика: http://android-er.blogspot.co.il/2013/04/simulate-kill-activity-to-test.html, но я уже описал это в своем вопросе, и это не то, что я хочу имитировать. – Elizabeth

+0

Изменение конфигурации заставляет 'Activity' проходить через жизненный цикл' onDestry() 'и' onCreate() '. Неважно, было ли это вызвано ориентацией, локалью или прекращением приложения вручную - все они будут иметь тот же самый эффект на вашей «Деятельности». Вам не нужно и невозможно выполнить все возможные изменения конфигурации. –

0

Изменение языка устройства является одним из способов заставить воссоздать все действия, которые не связаны с изменением ориентации.

Смежные вопросы