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 - 打开/关闭记录存储的最佳实践?的主要内容,如果未能解决你的问题,请参考以下文章