Android 4.4.2 - java.lang.RuntimeException: Performing stop of activity that is not resumed

匿名 (未验证) 提交于 2019-12-03 02:45:02

问题:

I'm getting this exception on a 4.4.2 device. Not reproducible on Android 4.3 device or lower.

Setup is I have a home activity (subclass of support ActionBarActivity). The home activity checks a boolean flag, and if true, launches a splash screen activity (yes, ideally the splash comes before the home activity, but let's assume I can't change it to work that way for now).

The splash screen is launched with startActivityForResult, it downloads some config options from the server, then finishes and returns the result back to the home activity.

Weird thing is this works fine on 4.3 and below, but on 4.4 devices, I get the above exception (full stack trace):

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) 

Based on the above, it looks like onStop (because I launch the splash activity on onCreate) is called before onResume for the Home Activity.

Why is this now causing problems in 4.4.x?

回答1:

That doesn't seem right to me. The splash activity would now be the top activity in the stack, so the HomeActivity onStop lifecycle method would get called eventually. Coincidentally, I moved the startActivity call for the splash activity from onCreate to onResume in the HomeActivity, and the error goes away.



回答2:

The issue will still be there on all HighEnd phones with 4.4.2 and above including NEXUS 5,Samsumg s4 since onResume gets called but still it is in animation stage.So if you try to start a activity in onResume the issue will replicate.

Put your switching activity in a handler delayed method.

    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;     } }); 

And in onResume call this.

 handler.sendEmptyMessageDelayed(1, 1000); 

By that time you can show loader or something or block user Interaction



回答3:

Just call the onResume super method before launching the new activity:

super.onResume(); 


回答4:

I was getting this exception even when using onResume(), so I ended up overriding onPostResume() and starting activity from there, and the exception is gone. Not sure if this is an ideal solution, but still...



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!