2015-11-24 102 views
2

我有一個在Android中使用後退按鈕的問題。我知道我可以使用onBackPress()方法來處理它,但我需要一種方法來執行onResume lifecyle中的後退按鈕事件。我必須這樣做的原因是,我已經從onResume方法的另一個類中啓動了一個計時器。當我按下後退按鈕時,此計時器應停止。但是當我使用onBackPress()方法來停止它時,我得到了一個N​​ullPointerException,因爲定時器從未開始。當我使用一個按鈕來停止onResume方法內的定時器時,定時器會正確停止。所以quastion是我可以使用另一個按鈕而不是後退按鈕? 或者當用戶按下按鈕時,如何使用onResume中的後退按鈕事件?使用另一個按鈕,而不是後退按鈕

+0

你不能對其他生命週期方法中的關鍵事件作出反應,因爲關鍵事件是在它們自己的回調中傳遞的,直到你從任何現有的UI線程回調中返回都不會發生。您很可能需要重新設計您的設計,並使用顯式狀態標誌或隱式狀態標誌(例如,在您嘗試使用它之前,看看導致您的NPE的事物是否非空) –

回答

1

不需要做這種額外的工作,如果你需要所有這些東西,只是因爲定時器空指針在停止計時器之前寫入條件如下。

讓你的定時器變量public static然後

if(YouActivity.timer!=null) 
    YouActivity.timer.stop(); 
+1

這很簡單說過。非常感謝你! –

1

您可能正在創建計時器作爲原始Activity的變量或子項。當Activity暫停(或離開屏幕)時,該變量可能被破壞。這就是按鈕工作的原因(相同Activity),而不是onBackPressed,在另一個Activity中調用。

您需要在另一個線程上運行的靜態變量或全局變量 - 如ServiceApplication對象。 Application對象是最後一招,因此請首先查看Service

-1

嘗試增加FLAG_ACTIVITY_CLEAR_TOP調用onBackPressed()

之前,從 http://developer.android.com/reference/android/content/Intent.html

如果設置,以及正在啓動的活動在目前的任務已經運行,然後,而不是推出該活動的一個新實例,其上的所有其他活動將被關閉,並且這個意圖將作爲新的意圖被傳遞到(現在在上面)舊活動。

0

我已經完全理解這個問題: -

  1. 我sugestiion這是需要解決的問題OnBackPressed()方法添加 第一點定時器將被殺死並停止方法。
+0

請澄清你的答案,並可能添加一些代碼說明它。正如目前所寫,很難理解你的意思。可能你應該把一個句子分成一系列步驟,以便它變得更清晰。 – YakovL