J2ME RMS - 打开/关闭记录存储的最佳实践?

Posted

技术标签:

【中文标题】J2ME RMS - 打开/关闭记录存储的最佳实践?【英文标题】:J2ME RMS - Best practice for opening/closing record store? 【发布时间】:2015-03-18 18:29:22 【问题描述】:

我的 midlet 使用两个唱片店。目前,我在应用启动时创建/打开两个唱片存储,并在应用的整个生命周期内都保持打开状态。

如果我在每次操作(例如,读取或写入)后打开/关闭记录存储,则模拟器中的延迟非常糟糕。

同样,如果我在应用退出时关闭记录存储,还会有另一个很长的延迟。

所以我可以在我的代码中永远不关闭记录存储(因此,假设设备会在应用程序退出时自行执行此操作)。如果不是,我可以采用什么最佳做法,而不会给用户造成明显的延迟,也不会冒任何数据丢失的风险?

docs 中没有关于此的任何内容,我在 google 上也找不到任何内容。

【问题讨论】:

【参考方案1】:

据我所知,在某些手机上,DB 中的更改只有在 DB 关闭时才会永久存储。而在大多数 J2ME 实现中,更改会保存在每个记录更改中。

如果可以显着提高性能,我建议在整个应用会话期间保持数据库打开。当然,在destroyApp() 中处理DB close 是值得的。

您还可以考虑实现“自动保存”功能 - 如果 IO 一段时间不活动,则关闭并重新打开数据库。

通常只在某些操作中执行大量的 DB 访问,而不是一直执行。在这种情况下,您可以将一堆 IO 操作包装在一个“事务”中,并通过 DB 关闭来完成它。

换句话说,在大多数设备上,您可以使用第一种方法(保持数据库打开),但在某些设备上(不记得确切,可能在诺基亚 S40 或 S60 上),当应用程序运行时,它可能会导致数据丢失由VM终止(并且您无法处理它,因为不保证调用destroyApp),没有适当的DB关闭。所以在一般情况下,用 DB.close() 语句包装关键事务是正确的

【讨论】:

以上是关于J2ME RMS - 打开/关闭记录存储的最佳实践?的主要内容,如果未能解决你的问题,请参考以下文章

j2me - 如何使用 RMS 存储自定义对象

J2ME 中的数据库

RMS 存储值在 J2ME 仿真器中不是永久可用的

如果我关闭设备,使用 RMS 保留的数据会发生啥情况

开发现代 J2ME 应用程序的最佳方式是啥? [关闭]

除了 syslog 之外,Linux 服务/守护程序文件记录最佳实践是啥? [关闭]