簡體   English   中英

按下后退按鈕時沒有調用onPause?

[英]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.

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