Android 4.4.2 – java.lang.RuntimeException:执行停止没有恢复的活动

我在4.4.2设备上得到这个exception。 在Android 4.3或更低版本上不可重现。

安装程序是我有一个家庭活动(支持ActionBarActivity子类)。 家庭活动检查一个布尔标志,如果是true,则启动一个启animation面活动(是的,理想的情况是在家庭活动之前,但我们假设我现在不能改变它的工作方式)。

启animation面通过startActivityForResult启动,它从服务器下载一些configuration选项,然后结束并将结果返回到家庭活动。

奇怪的是这是4.3和以下的工作正常,但在4.4设备上,我得到上述exception(完整的堆栈跟踪):

 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上启动的飞溅活动)之前调用HomeResult的onResume。

为什么现在在4.4.x中导致问题?

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

问题仍然会出现在4.4.2及以上版本的所有HighEnd手机上,包括NEXUS 5,Samsumg s4,因为onResume被调用,但仍然在animation阶段。所以如果您尝试在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.onResume(); 

即使使用onResume() ,我也得到了这个exception,所以我最终重写了onPostResume()并从那里开始活动,exception消失了。 不知道这是一个理想的解决scheme,但仍然…