Android 4.4.2 - java.lang.RuntimeException:执行停止未恢复的活动

use*_*558 37 android android-activity

我在4.4.2设备上遇到此异常.在Android 4.3设备或更低版本上无法重现.

设置是我有一个家庭活动(支持的子类ActionBarActivity).home活​​动检查一个布尔标志,如果为true,则启动一个启动画面活动(是的,理想情况下,启动在home活​​动之前,但我们假设我现在无法改变它以此方式工作).

启动启动屏幕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)
Run Code Online (Sandbox Code Playgroud)

基于上面的内容,它看起来像onStop(因为我在onCreate上启动了splash活动)在onResume之前为Home Activity调用.

为什么现在这会导致4.4.x出现问题?

use*_*558 20

这对我来说似乎不对.splash活动现在将成为堆栈中的顶级活动,因此HomeActivity最终将调用onStop生命周期方法.巧合的是,我将startActivity泼水活动的调用从中onCreate移到onResumeHomeActivity,并且错误消失了.


she*_*tal 10

这个问题仍将出现在Android 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:
              //Start another Activity Here

            default:
                break;
        }
        return false;
    }
});
Run Code Online (Sandbox Code Playgroud)

在onResume中调用它.

 handler.sendEmptyMessageDelayed(1, 1000);
Run Code Online (Sandbox Code Playgroud)

到那时你可以显示加载器或其他东西或阻止用户交互