![](/img/trans.png)
[英]java.lang.RuntimeException: Performing stop of activity that is not resumed in android
[英]Android 4.4.2 - java.lang.RuntimeException: Performing stop of activity that is not resumed
我在4.4.2設備上遇到此異常。 在Android 4.3設備或更低版本上無法重現。
安裝程序是我有一個家庭活動(支持ActionBarActivity
子類)。 home活動檢查一個布爾標志,如果為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活動)在onResume之前為Home Activity調用。
為什么現在這會導致4.4.x出現問題?
這對我來說似乎不對。 splash活動現在將成為堆棧中的頂級活動,因此最終將調用HomeActivity
onStop生命周期方法。 巧合的是,我感動startActivity
呼吁從飛濺活動onCreate
到onResume
在HomeActivity
,並且錯誤消失。
這個問題仍將出現在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;
}
});
在onResume中調用它。
handler.sendEmptyMessageDelayed(1, 1000);
到那時你可以顯示加載器或其他東西或阻止用戶交互
即使使用onResume()
,我也得到了這個異常,所以我最終覆蓋onPostResume()
並從那里開始活動,異常消失了。 不確定這是否是一個理想的解決方案,但仍然......
只需在啟動新活動之前調用onResume super方法:
super.onResume();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.