我的midlet使用两个唱片店。目前,我在应用程序启动时创建/打开两个记录存储,并在应用程序的整个生命周期内保持打开状态。
如果我在每次操作(例如,读取或写入)后打开/关闭记录存储,则模拟器中的延迟非常糟糕。
同样,如果我在应用程序退出时关闭记录存储,则会有另一个很长的延迟。
因此,我永远不会在我的代码中关闭记录存储(因此,假设设备将在应用程序退出时自行执行此操作)。如果没有,我可以采用什么样的最佳做法,而不会给用户带来明显的延迟,并且不会有任何数据丢失的风险?
docs中没有任何关于此事的内容,也没有我在谷歌上找到的内容。
答案 0 :(得分:1)
据我记忆,在某些手机上,只有在关闭数据库时才会永久存储数据库中的更改。在大多数J2ME实现中,每次记录更改都会保存更改。
如果能够显着提高性能,我建议将DB保持为整个应用会话开放。当然值得在destroyApp()中处理数据库关闭。
您还可以考虑实施'自动保存' feature - 如果IO处于非活动状态一段时间,则关闭并重新打开DB。
通常只在某些操作中执行繁重的数据库访问,而不是经常执行。在这种情况下,您可以在一个'事务中包装一堆IO操作。用DB关闭完成它。
换句话说,在大多数设备上,您可以采用第一种方法(保持数据库打开),但在某些设备上(不记得确切,可能在诺基亚S40或S60上),当应用程序出现时,它可能会导致数据丢失由VM终止(并且您无法处理它,因为destroyApp无法保证被调用),没有正确的数据库关闭。因此,在一般情况下,使用DB.close()语句
包装关键事务是正确的