最佳实践 - 将活动数据保存到android数据库

时间:2016-01-15 19:57:55

标签: android android-activity activity-lifecycle android-database

我目前将Activity的应用数据存储在Parcelable对象中。在方向更改时,我将其保存并使用onSaveInstanceStateonRestoreInstanceState加载。

我想在用户退出活动时将数据保存到数据库。
而且,我想最小化数据库调用。所以,

我应该在哪里编写代码来将数据保存到数据库中?是onPause()onResume()onStop()还是onDestroy()

3 个答案:

答案 0 :(得分:2)

  

我目前在Parcelable对象中存储Activity的应用数据

由于您的其余问题是关于数据库I / O,请注意Parcelable与数据库I / O无关。

  

我想在用户退出活动时将数据保存到数据库中。

我建议您在数据更改时保存数据,而不是等待并冒着丢失数据的风险(例如,应用程序崩溃)。

  

是onPause(),onResume(),onStop()还是onDestroy()?

不是onResume()。该生命周期方法被称为进入屏幕的活动的一部分,而不是在活动离开时。

不是onDestroy(),因为无法保证会调用onDestroy()

其他两个都是合理的。主要区别在于可见性:

  • 如果某个活动占据了前景,但该活动的主题是对话框或以其他方式允许您的活动查看,则只会暂停

  • 如果某个活动占用了前景,并且您的活动不再可见,则会暂停然后停止

答案 1 :(得分:2)

如果你真的在谈论最佳实践,那么以上都不是。 活动是视图层对象。有些人可能认为它是混合控制器和视图。在任何一种情况下,它都不是模型或业务层对象。

如果您的数据足够重要,可以写入数据库,那么我猜测它不是视图状态,它可能是域数据。因此,最佳做法是让Model / Business层(与Activity完全分离)处理它。考虑到移动应用程序的本质,我会在数据发生变化时写入数据库(当然是异步的),而不考虑各种Android组件的生命周期。

答案 2 :(得分:1)

对接受的答案进行更正:(我很惊讶Mark Murphy!)

来自活动生命周期的android文档:

  

onPause()执行非常简短,并不一定能提供           有足够的时间执行保存操作。为此原因,           你不应该使用onPause()来保存应用程序或用户           数据,进行网络调用或执行数据库事务;