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

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?

4b9b3361

Ответ 1

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

Ответ 2

Проблема будет по-прежнему присутствовать на всех телефонах 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);

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

Ответ 3

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

super.onResume();

Ответ 4

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