2016-09-26 80 views
2

在我的Android應用程序中,我執行少量資源密集型操作。我必須在應用程序被殺之前隨時關閉/清除這些內容。據我所知onStop()/onDestroy()生命週期方法不保證在殺死應用程序期間執行。因此,在這些方法中進行關閉/清理操作是不可靠的。 Android爲實現此功能提供了哪些最佳選擇?謝謝。在殺死應用程序之前執行強制性清理操作

+1

您可以使用'finally'塊關閉您的資源。 – Rustam

+0

在哪個生命週期方法中放置'finally'塊? – Omkar

+0

https://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html – user1506104

回答

1

您應該使用而不是onStop, onDestroy。這是保證被稱爲。

1

我的建議是在你的主要活動上重寫onDestroy()以在應用程序被銷燬時執行代碼,或者在用戶退出應用程序時使用onStop()來執行代碼。

onDestroy()將在活動被銷燬前被調用。它可以被稱爲活動正在完成(某人稱爲finish()),或者因爲系統銷燬活動的實例以節省空間。這兩種情況可以通過使用isFinishing()方法來區分。

另一方面onStop()在用戶不再可見活動時調用。這可能是因爲它正在被銷燬,或者因爲另一個活動已被恢復。如果活動返回與用戶交互,或者如果此活動正在消失,則由onDestroy()繼承,則可能由onRestart()跟隨。

@Override 
protected void onStop() { 
    super.onStop(); 
    // The activity is no longer visible i.e is it stopped now 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    //It is about to destroyed 
} 
+0

'onStop()'和'onDestroy'不保證運行到最後。他們可能只執行部分方法。殺死該應用程序後,Android應用程序進程可能隨時終止。 – Omkar

1

如果在onCreate()方法內調用finish(),onPause()和onStop()將不會被調用。例如,如果您在onCreate()過程中檢測到錯誤並由此調用finish(),則可能會發生這種情況。但是,在這種情況下,您希望在onPause()和onStop()中執行的任何清理操作都不會執行。

雖然onDestroy()是活動生命週期中的最後一次回調,但值得一提的是,此回調可能並不總是被調用,因此不應該依賴它來銷燬資源。最好在onStart()和onResume()中創建資源,並分別在onStop()和onPause中銷燬它們。

有關活動生命週期的更多信息,請參閱Android開發人員指南。 https://developer.android.com/training/basics/activity-lifecycle/starting.html

相關問題