Intereting Posts
Как поместить изображение в AlertDialog? Android Как повторно включить отключенное предупреждение Android Lint на уровне файла Кажется, что ваше устройство не поддерживает камеру (или заблокировано) Использование SMS для проверки номера телефона устройства Неправильная ориентация объекта EditText в макетах Просмотр пейджера + ImageView + Пинч-масштабирование + поворот Как редактировать исходный код клавиатуры android os? Java.lang.IllegalStateException: YouTubeServiceEntity не инициализировала ошибку при использовании YouTubePlayerApi Как настроить VPN программно? Android – изменение левого поля с помощью анимации «Веб-страница недоступна» с WebView.loadData () ТОЛЬКО в эмуляторе Как удалить записи из firebase Необходимо инициализировать Firebase Analytics в каждом мероприятии? OverridePendingTransition показывает вторую активность слишком быстро Kotlin on android: Не удается найти основной объединенный манифест. Что вызывает эту ошибку?

Android 4.4.2 – java.lang.RuntimeException: выполнение остановки активности, которая не возобновляется

Я получаю это исключение на устройстве 4.4.2. Не воспроизводится на устройстве Android 4.3 или ниже.

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

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

Странно, что это работает отлично на 4.3 и ниже, но на 4.4 устройствах я получаю исключение выше (полная трассировка стека):

 02-21 13:36:16.733 24409-24409/test.player E/ActivityThread﹕ Performing stop of activity that is not resumed: {test.player/test.ui.actvities.HomeActivity} java.lang.RuntimeException: Performing stop of activity that is not resumed: {test.player/test.ui.actvities.HomeActivity} at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3147) at android.app.ActivityThread.handleStopActivity(ActivityThread.java:3234) at android.app.ActivityThread.access$1100(ActivityThread.java:135) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1223) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5017) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) at dalvik.system.NativeStart.main(Native Method) 

Исходя из вышесказанного, похоже, что onStop (потому что я запускаю всплеск активности onCreate) вызывается перед onResume для домашней активности.

Почему это вызывает проблемы в 4.4.x?

Solutions Collecting From Web of "Android 4.4.2 – java.lang.RuntimeException: выполнение остановки активности, которая не возобновляется"

Мне это не кажется правильным. Активность всплеска будет теперь верхней активностью в стеке, поэтому метод жизненного цикла HomeActivity onStop будет вызван в конечном итоге. Кстати, я переместил вызов startActivity для активности всплеска от onCreate до onResume в HomeActivity , и ошибка исчезла.

Проблема будет по-прежнему присутствовать на всех телефонах HighEnd с 4.4.2 и выше, включая NEXUS 5, Samsumg s4, поскольку onResume вызывается, но все же он находится в стадии анимации. Поэтому, если вы попытаетесь начать работу в onResume, проблема будет реплицироваться.

Поместите свою активность переключения в метод задержанного обработчика.

  Handler handler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { switch (msg.what) { case 1: //Strat another Activity Here default: break; } return false; } }); 

И в onResume назовите это.

  handler.sendEmptyMessageDelayed(1, 1000); 

К тому времени вы можете показать загрузчик или что-то или заблокировать взаимодействие с пользователем

Просто вызовите метод onResume super перед запуском нового действия:

 super.onResume(); 

Я получал это исключение даже при использовании onResume() , поэтому я закончил переопределение onPostResume() и начал работу там, и исключение исчезло. Не уверен, что это идеальное решение, но все же …