在我的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. 由DefaultHttpClient执行的杀死应用程序(killProcess)执行执行
- 3. iPhone应用程序在它结束之前被杀死加载
- 4. OnPause状态强制杀死Android应用程序
- 5. 杀死运行应用程序
- 6. 在杀死进程之前保存gmon.out
- 7. Java:杀死执行数据库操作的线程
- 8. Android:操作系统杀死它时的Autorestart应用程序
- 9. 在退出Java应用程序之前进行清理
- 10. 强制Windows操作系统在执行应用程序之前加载整个应用程序可执行文件(.exe)
- 11. C#如何杀死使用Process.Start()强制杀死我的程序时运行的进程
- 12. 如何在执行其他操作之前强制用户填写表单?
- 13. Jmeter清理/强制在完全执行组之前不要中止
- 14. 在Android中杀死应用程序
- 15. 谷歌应用程序引擎,Java:在开发服务器死亡之前执行操作
- 16. Elasticsearch - 强行杀死分片
- 17. 杀死线程强行C++的Win32
- 18. 控制台应用程序在执行回调之前退出
- 19. 如果操作系统杀死了应用程序,处理应用程序活动
- 20. 杀害互操作的应用程序
- 21. 在iOS 4.2杀死应用程序之前单击调试5秒钟
- 22. 在触发事件处理程序之前执行点击操作
- 23. 在异常处理之前强制执行函数(JAVA)
- 24. 在操作之前或之后执行ASP.Net MVC控制器属性吗?
- 25. iOS - 用按钮杀死应用程序?
- 26. 在运行.NET自定义操作之前强制安装GAC?
- 27. 当应用程序被强制杀死时开始播放音频
- 28. 是否存在强制执行操作的C#属性?
- 29. 僵尸杀死我的应用程序
- 30. 应用程序杀死onBackPressed android
您可以使用'finally'块关闭您的资源。 – Rustam
在哪个生命周期方法中放置'finally'块? – Omkar
https://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html – user1506104