在我的Android應用程序中,我執行少量資源密集型操作。我必須在應用程序被殺之前隨時關閉/清除這些內容。據我所知onStop()
/onDestroy()
生命週期方法不保證在殺死應用程序期間執行。因此,在這些方法中進行關閉/清理操作是不可靠的。 Android爲實現此功能提供了哪些最佳選擇?謝謝。在殺死應用程序之前執行強制性清理操作
回答
您應該使用而不是onStop, onDestroy
。這是保證被稱爲。
我的建議是在你的主要活動上重寫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
}
'onStop()'和'onDestroy'不保證運行到最後。他們可能只執行部分方法。殺死該應用程序後,Android應用程序進程可能隨時終止。 – Omkar
如果在onCreate()方法內調用finish(),onPause()和onStop()將不會被調用。例如,如果您在onCreate()過程中檢測到錯誤並由此調用finish(),則可能會發生這種情況。但是,在這種情況下,您希望在onPause()和onStop()中執行的任何清理操作都不會執行。
雖然onDestroy()是活動生命週期中的最後一次回調,但值得一提的是,此回調可能並不總是被調用,因此不應該依賴它來銷燬資源。最好在onStart()和onResume()中創建資源,並分別在onStop()和onPause中銷燬它們。
有關活動生命週期的更多信息,請參閱Android開發人員指南。 https://developer.android.com/training/basics/activity-lifecycle/starting.html
- 1. 強制操作系統在「子程序」之後執行清理操作
- 2. 防止強制殺死應用程序
- 3. 由DefaultHttpClient執行的殺死應用程序(killProcess)執行執行
- 4. iPhone應用程序在它結束之前被殺死加載
- 5. 重新啓動應用程序強制殺死
- 6. Android:狀態強制殺死的應用程序
- 7. OnPause狀態強制殺死Android應用程序
- 8. 殺死應用程序
- 9. 殺死運行應用程序
- 10. 在殺死進程之前保存gmon.out
- 11. Android:操作系統殺死它時的Autorestart應用程序
- 12. Java:殺死執行數據庫操作的線程
- 13. 防止通過任務管理器強行殺死程序
- 14. 在運行Android應用程序之前清理版本
- 15. 在退出Java應用程序之前進行清理
- 16. 強制Windows操作系統在執行應用程序之前加載整個應用程序可執行文件(.exe)
- 17. Java:在強制執行程序之前打印消息
- 18. Android:殺死(全部)前臺運行應用程序
- 19. Spark Scheduler強制執行應用程序
- 20. C#如何殺死使用Process.Start()強制殺死我的程序時運行的進程
- 21. 如何在執行其他操作之前強制用戶填寫表單?
- 22. Jmeter清理/強制在完全執行組之前不要中止
- 23. 在Android中殺死應用程序
- 24. 如何強制處理程序Ansible執行任務之前運行?
- 25. 谷歌應用程序引擎,Java:在開發服務器死亡之前執行操作
- 26. Elasticsearch - 強行殺死分片
- 27. 殺死線程強行C++的Win32
- 28. 在卸載Windows Metro應用程序之前要執行的操作
- 29. 如何在gwt應用程序重新啓動/關閉之前執行操作?
- 30. 強制應用程序池以32位模式運行殺死應用程序池
您可以使用'finally'塊關閉您的資源。 – Rustam
在哪個生命週期方法中放置'finally'塊? – Omkar
https://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html – user1506104