关闭应用程序后,我需要清除应用程序的数据库(删除所有表)。我决定在一些 Activity 的 onDestroy() 中实现这一点。据我所知,所有 onDestroy() 方法都是在应用程序完成运行时调用的。
但如果这是一个不好的做法 - 请在应用程序关闭时建议其他一些清除数据库的方法。
关闭应用程序后,我需要清除应用程序的数据库(删除所有表)。我决定在一些 Activity 的 onDestroy() 中实现这一点。据我所知,所有 onDestroy() 方法都是在应用程序完成运行时调用的。
但如果这是一个不好的做法 - 请在应用程序关闭时建议其他一些清除数据库的方法。
这不是一个好的选择,因为无法保证在您的应用关闭时会调用onDestroy() 。它可能会被系统立即终止,在这种情况下,您将无法清除您的数据。如文档中所述:
注意:不要指望这个方法被称为保存数据的地方!例如,如果一个活动正在内容提供者中编辑数据,那么这些编辑应该在 onPause() 或 onSaveInstanceState(Bundle) 中提交,而不是在这里。此方法通常用于释放资源,例如与活动相关联的线程,以便被破坏的活动不会在其应用程序的其余部分仍在运行时留下这些东西。在某些情况下,系统会简单地终止 Activity 的宿主进程,而不会在其中调用此方法(或任何其他方法),因此不应使用它来执行打算在进程消失后保留的事情。
相反,您应该创建一个扩展Application的类,并在onCreate()方法中删除您的表(如果它们存在),因为该方法在应用程序的生命周期中仅调用一次。
但是,如果您觉得每次应用程序停止运行时都需要清除数据,您应该重新考虑使用数据库,因为它们用于持久存储。
Would an in-memory database work for you? The database is never saved to persistent storage in the first place, and only exists as long as your process is alive and the database connection is open.
看看这个答案。
至于何时删除所有表,最佳实践将要求您这样做,或释放任何其他资源,onPause()
如果isFinishing()
返回 true。
快速说明:如果您的应用程序包含许多活动,那么您当然应该只在根活动的onPause()
.
祝你好运!