[英]onPause not called when back button pressed?
我的理解,顯然是錯誤的,只要按下后退按鈕就會調用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()
之前啟動的功能? 提前感謝您提供任何信息。
當您的活動不再在前台時,將始終調用onPause
,這是有保證的。 也許你的_END_GAME
不是假的? 將調試日志輸出添加到onPause方法,您將看到它始終被調用。
我應該注意,在onPause期間顯示一個對話框是非常糟糕的形式 - 用戶試圖擺脫你的應用程序(甚至可能是因為來電)。 那你不想要對話。 這與Android設計背道而馳。
事實上,如果您嘗試在onDestroy或onPause中執行冗長的惡作劇,Android操作系統將簡單地縮短您的應用程序。 基本上,如果那些被召喚,你應該安靜地消失。
如果您真的想攔截后退按鈕,可以檢查Ted建議的按鈕,但請記住,您的應用可以通過許多其他方式轉到后台 - 主頁按鈕,所選通知,來電等。
您應該通過覆蓋onKeyDown
來檢查后退按鈕,而不是在onPause
進行測試。 只要您的活動
不再在后台,
就會調用onPause
離開前景; 它不一定完成。 (您可以檢查isFinishing()
。)有關處理后退鍵的詳細信息,請參閱此處 。
onPause
被調用,你的對話框正在顯示,只是在Android完成你的應用之前的一小段時間內。 如果要查看正在發生的事情,請將日志語句放在那里。
如果要在按下后退按鈕時顯示對話框,則最簡單的方法(適用於Android 2.1+)將覆蓋活動中的onBackPressed
方法
@Override
public void onBackPressed() {
if (gameRunning) {
// show dialog
} else {
// exit
super.onBackPressed();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.