2011-04-06 178 views
5

這是我的理解,顯然是錯誤的,onPause()被稱爲每當後退按鈕被按下?現在,在我的代碼,我把這個onPause()事件:當後退按鈕被按下時onPause不被調用?

@Override 
protected void onPause(){ 
    super.onPause();   

    if(!_END_GAME){ 
     Builder _alert = new AlertDialog.Builder(this) 
     .setMessage("onPause, with game NOT over!"); 
     _alert.setNeutralButton("OK.", 
       new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface arg0, int arg1) { 
       arg0.dismiss(); // Kills the interface 
       System.runFinalizersOnExit(true); 
       finish(); 
      } 
     }); 
     _alert.setTitle("Your Score!"); 
     _alert.show(); 
    } 

}

現在的問題是,該對話框不會推出什麼那麼以往,然後將代碼中的錯誤了。我把對話框放在那裏,試圖看到onPause(被調用的位置,並幫助我調試一些其他變量等。但就像我說的,它甚至沒有被顯示出來。任何想法,爲什麼會這樣?當後退按鈕被按下時,有沒有在onPause()之前啓動的功能?提前感謝您的任何信息。

+0

這是真的:有情況下'當片段不再可見時,onPause()不會被調用!我有同樣的問題,但情況不同。看來FragmentManager仍然可以在內存中保存碎片。當用戶點擊返回按鈕時,可以取代FM,將整個碎片集合交換出來並顯示以前的狀態。這可能會錯過這些片段的所有onPause,onStop和onDestroy方法。 - 我錯了嗎? – 2017-04-24 14:32:41

回答

2

您應該通過覆蓋onKeyDown來檢查後退按鈕,而不是在中進行測試。 只要您的活動 不再在後臺 離開前臺時被調用;它不一定完成。 (您可以檢查isFinishing()。)有關處理後退密鑰的更多信息,請參閱here

+1

不要檢查後退按鈕。在許多情況下,這是一種可怕的破解行爲。有無數其他方法可以將活動帶到後臺(來電,主頁按鈕等)。 – EboMike 2011-04-06 21:18:13

+0

非常感謝你,我已經開始走下這條路,並很快意識到我出錯的地方。儘管感謝迅速的迴應! – 2011-04-06 21:25:54

+0

@EboMike - 爲什麼在許多情況下檢查後退按鈕是否有破解並且一定會中斷?這正是Dianne Hackborn在我引用的博客文章中建議的策略。這比在'onPause()'中檢查這種事情要好得多。 – 2011-04-06 22:00:05

3

將始終在您的活動不在前臺時被調用,這是有保證的。也許你的_END_GAME不是錯誤的?添加一個調試日誌輸出到你的onPause方法,你會發現它總是被調用。

我應該注意,雖然在onPause期間顯示對話框是非常糟糕的形式 - 用戶試圖擺脫你的應用程序(甚至可能是因爲打來​​的電話)。然後你不想要一個對話框。這違背了Android設計。

事實上,如果您嘗試在onDestroy或onPause中執行冗長的惡作劇,Android操作系統將簡單地將您的應用短路。基本上,如果這些被調用,你應該安靜地消失。

如果你確實想攔截後退按鈕,你可以檢查Ted建議的按鈕,但請記住,你的應用程序可以通過許多其他方式轉到後臺 - 主頁按鈕,選定的通知,來電電話等

+0

是的,正如我所說的,我只是在調試,不會有對話框在最終使用。 – 2011-04-06 21:25:01

2

被調用,並且您的對話框顯示,只是在Android完成您的應用程序之前的一小段時間。如果你想看看發生了什麼,把日誌語句放在那裏。

如果你想顯示當按下後退按鈕那麼最簡單的方法(適用於Android 2.1+)的對話是覆蓋onBackPressed方法在您的活動

@Override 
public void onBackPressed() { 
    if (gameRunning) { 
     // show dialog 
    } else { 
     // exit 
     super.onBackPressed(); 
    } 
} 
相關問題