2014-02-22 65 views
36

我得到一个4.4.2设备此异常。在Android 4.3或更低版本上不可重现。的是Android 4.4.2 - 了java.lang.RuntimeException:活动的执行停止未恢复

设置为我有一个家庭活动(支持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上启动splash活动)在homeResult的onResume之前调用。

这是为什么现在引起4.4.x到的问题?

+0

是关于“设置/开发者选项/不保留活动”的选择?该选项是在4.4.2设备上选择的,而未在其他设备上选择? – Devrim

+0

不是,该选项在两个设备上都未启用。 – user3072558

+0

下载后,你的飞溅活动完成吗?你如何回到'HomeActivity'?什么是飞溅活动,它是一个对话框? – mangusta

回答

20

这对我来说不太合适。现在,启动活动将成为堆栈中的顶级活动,因此HomeActivity onStop生命周期方法将最终被调用。巧合的是,我在HomeActivity移动从onCreatestartActivity呼吁飞溅活动onResume,并错误消失。

+1

在我的情况下,仍然问题是onResume,如果我开始另一项活动。我必须做的是延迟onResume约1000毫秒的活动开始。是否有更好的办法? – sheetal

10

这个问题仍然会出现在4.4.2及以上版本的所有HighEnd手机上,包括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); 

到那个时候,你可以显示加载器,要么就是阻止用户交互

4

推出新的活动之前就调用的onResume超级方法:

super.onResume(); 
+0

如果我没有实现onResume()方法会怎样? –

+1

然后,您自动继承super.onResume()作为onResume()自动 – nadavge

3

我即使得到这个例外使用onResume(),所以我最终覆盖了onPostResume()并从那里开始活动,并且异常消失。不知道这是一个理想的解决方案,但仍...

相关问题