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() и начал работу там, и исключение исчезло. Не уверен, что это идеальное решение, но все же …