簡體   English   中英

Android 4.4.2 - java.lang.RuntimeException:執行停止未恢復的活動

[英]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呼吁從飛濺活動onCreateonResumeHomeActivity ,並且錯誤消失。

這個問題仍將出現在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM