2014-02-19 27 views
1

我想要一個函數,當我的應用程序關閉時被調用。我的應用程序中的所有活動都擴展了一個自定義類MenuActivity,這又擴展了Activity類。在MenuActivity中,我有以下代碼...如何抓住Android應用程序關閉

@Override 
protected void onDestroy() 
{ 
    System.out.println("DESTROY IT"); 

} 

由於某種原因,我從來沒有看到這段文字。我已經嘗試了有和沒有super.onDestroy();在那裏。我希望在用戶關閉應用程序時能夠調用它(保持主頁按鈕以查看打開的應用程序並輕掃以關閉),或者應用程序崩潰。我需要對應用程序關閉進行一些清理(關閉正在進行的通知以及其他一些事情)。

我認爲它應該足夠簡單,使用onDestroy方法,但它似乎永遠不會被調用。有任何想法嗎?

回答

0

您應該爲此使用onStop()。 您可以在這裏閱讀更多有關Android活動生命週期的信息:http://developer.android.com/training/basics/activity-lifecycle/stopping.html

Android開發人員指南是一個很好的資源。

+0

的'onStop()'方法對於我想要的是不夠的。我正在做的是創建一個正在進行的通知,允許您播放,暫停,並轉到我的應用程序中的上一首和下一首歌曲。即使您切換到其他應用程序,或者您的手機回家,我也希望此通知保持活躍狀態​​,這樣您仍然可以在應用程序外訪問播放器的功能。如果您打開手機上的home,則會調用'onStop()'函數,所以這會打破我正在進行通知的目的。 – jas7457

+0

聽起來你需要使用服務。 http://developer.android.com/guide/components/services.html – Jggrnaut

1

方法onDestroy()的部分將不會被調用每一次,但你可以這樣做:

public void onPause() { 
    super.onPause() 
    if (isFinishing()) { 
     //call some method 
    } 
} 
+0

我也試過這種方法,它似乎不工作。當按住菜單按鈕並向左或向右滑動以關閉活動時,「if(isFinishing())」子句中的代碼永遠不會到達。 – jas7457

+0

當您按住菜單按鈕時,您的活動並未關閉,而是停止或暫停。當您按下後退按鈕或調用方法完成()時,您的活動即告結束。 – Autocrab

+0

當您打開任務管理器並從那裏結束任務時,它不會被調用。 – jas7457