Я только что заметил странную проблему, которая у меня была в моем приложении. Когда я запускаю свое приложение, если я его минимизирую, перейдите в настройки и измените язык, затем возобновите мое приложение (обратите внимание: это минимизация/возобновление, а не выход/запуск), он вызывает onCreate()
Activity вместо вызова onResume()
,Минимизация приложения, изменение языка и возобновление вызовов onCreate() вместо onResume()
Это вызывает множество проблем, особенно в тех областях, где я использую фрагменты в представлении. Отображаемыми фрагментами являются старые фрагменты, но ссылка на активность, которую они удерживают, равна null
. Таким образом, getActivity()
не работает сразу после возобновления, вызывая NullPointerException
во многих местах.
Мое приложение создается для Android 4.0.4 и выше, и я заметил эту проблему на разных устройствах и эмуляторах, поэтому это не проблема платформы.
В идеале, я бы хотел позвонить onResume()
, как и предполагалось. Если нет, я бы предпочел, чтобы приложение самовольно запустилось и приземлило пользователя на главном экране вместо того, чтобы столкнуться с крахом приложения.
Приложение поддерживает только один язык: английский (США).
Неужели кто-нибудь сталкивался с этой проблемой раньше? Если да, можете ли вы решить его?
РЕДАКТИРОВАТЬ: Основываясь на ответе укладчика класса, Кажется, мне нужно самому сменить конфигурацию. Что должно быть хорошо, за исключением того, что исключение выбрасывается в самом onCreate()
. Я звоню getWindow().setRequestFeature(Window.FEATURE_INDETERMINATE_PROGRESS)
в onCreate()
. Когда локация изменяется, эта строка бросает RuntimeException
, говоря, что это должно быть вызвано до setContentView()
.
Означает ли это, что моя деятельность не разрушается должным образом?
Что касается вашего редактирования, убедитесь: _Do_ вы вызываете 'setRequestFeature()' перед 'setContentView()'? –
Определенно. Все мои действия наследуются от BaseActivity. Функция setRequestFeature вызывается в onCreate() базовой активности, которая вызывается в onCreate() моих отдельных действий. Только после этого я вызываю setContentView() в своей деятельности. –
Поскольку мое приложение поддерживает только один язык, я могу «исправить» его, установив в моем манифесте configChanges = «locale», но я хотел бы оставить это в качестве крайней последней меры. –