最佳实践 - 将 Activity 数据保存到 android 数据库
Best Practice - Saving Activity data to android database
我目前将 Activity
的应用程序数据存储在 Parcelable
对象中。在方向更改时,我保存它并使用 onSaveInstanceState
和 onRestoreInstanceState
加载它。
我想在用户退出时将数据保存到数据库activity。
而且,我想尽量减少数据库调用。所以,
将数据保存到数据库的代码应该写在哪里?是 onPause()
、onResume()
、onStop()
还是 onDestroy()
?
I currently store my app data for an Activity in a Parcelable object
由于您的其余问题是关于数据库 I/O,请注意 Parcelable
与数据库 I/O.
无关
I want to save the data to the database when the user exits the activity.
我建议您在数据更改时保存数据,而不是等待并冒丢失数据的风险(例如,应用程序崩溃)。
Is it onPause(), onResume(), onStop() or onDestroy()?
不是onResume()
。该生命周期方法作为 activity 出现在屏幕上的一部分被调用,而不是在 activity 离开时被调用。
它不是 onDestroy()
,因为不能保证 onDestroy()
会被调用。
其他两个都合理。主要区别在于可见性:
如果一个 activity 占据了前景,但是那个 activity 的主题就像一个对话框,或者以其他方式允许你的 activity 窥视,你只是暂停
如果 activity 占据了前台,并且您的 activity 不再可见,您将暂停然后停止
如果您真的在谈论最佳实践,那么上面的 none。
Activity 是 View-tier 对象。有些人可能会争辩说它是一个混合的 Controller 和 View。无论哪种情况,它都不是模型或 Business-tier 对象。
如果您的数据重要到足以写入数据库,那么我猜它不是视图状态,它可能是域数据。因此,最佳做法是让 Model/Business 层(与 Activity 完全分离)处理它。鉴于移动应用程序的性质,只要数据发生变化,我就会写入数据库(当然是异步的),而不考虑各种 Android 组件的生命周期。
对已接受答案的更正:(我很惊讶是马克·墨菲!)
来自 android 关于 activity 生命周期的文档:
onPause() execution is very brief and does not necessarily afford
enough time to perform save operations. For this reason,
you should not use onPause() to save application or user
data, make network calls, or execute database transactions;
我目前将 Activity
的应用程序数据存储在 Parcelable
对象中。在方向更改时,我保存它并使用 onSaveInstanceState
和 onRestoreInstanceState
加载它。
我想在用户退出时将数据保存到数据库activity。
而且,我想尽量减少数据库调用。所以,
将数据保存到数据库的代码应该写在哪里?是 onPause()
、onResume()
、onStop()
还是 onDestroy()
?
I currently store my app data for an Activity in a Parcelable object
由于您的其余问题是关于数据库 I/O,请注意 Parcelable
与数据库 I/O.
I want to save the data to the database when the user exits the activity.
我建议您在数据更改时保存数据,而不是等待并冒丢失数据的风险(例如,应用程序崩溃)。
Is it onPause(), onResume(), onStop() or onDestroy()?
不是onResume()
。该生命周期方法作为 activity 出现在屏幕上的一部分被调用,而不是在 activity 离开时被调用。
它不是 onDestroy()
,因为不能保证 onDestroy()
会被调用。
其他两个都合理。主要区别在于可见性:
如果一个 activity 占据了前景,但是那个 activity 的主题就像一个对话框,或者以其他方式允许你的 activity 窥视,你只是暂停
如果 activity 占据了前台,并且您的 activity 不再可见,您将暂停然后停止
如果您真的在谈论最佳实践,那么上面的 none。 Activity 是 View-tier 对象。有些人可能会争辩说它是一个混合的 Controller 和 View。无论哪种情况,它都不是模型或 Business-tier 对象。
如果您的数据重要到足以写入数据库,那么我猜它不是视图状态,它可能是域数据。因此,最佳做法是让 Model/Business 层(与 Activity 完全分离)处理它。鉴于移动应用程序的性质,只要数据发生变化,我就会写入数据库(当然是异步的),而不考虑各种 Android 组件的生命周期。
对已接受答案的更正:(我很惊讶是马克·墨菲!)
来自 android 关于 activity 生命周期的文档:
onPause() execution is very brief and does not necessarily afford enough time to perform save operations. For this reason, you should not use onPause() to save application or user data, make network calls, or execute database transactions;