Android SDCard I / O管理安装和卸载

时间:2012-05-09 19:49:50

标签: android sqlite io corruption

我知道这个问题的版本有各种各样的版本,但我无法就问题的最佳方法找到明确的答案。

我正在做的是我在SD卡上创建一个SQLite数据库。我希望能够从中查询并写入它。

我遇到的问题是在卸载SD卡时管理的最佳方法是什么。我的应用程序关闭就像MP3播放器一样完全没问题。但是,我想确保对db的任何写操作都不会部分完成。

我想到的是使用beginTransaction,将其标记为成功,然后调用end transaction。我的问题是如果没有调用事务结束会发生什么。这可能会导致数据损坏吗?此外,我需要一些帮助,了解要收听或挂钩的内容,以获取卸载SD卡的通知。

由于

1 个答案:

答案 0 :(得分:1)

这是数据库中交易的好处 - 您几乎不必担心:

  

“SQLite中的单个事务中的所有更改都会发生   完全或根本没有,即使写出改变的行为   

中断磁盘      

程序崩溃,操作系统崩溃或电源故障。“

取自http://www.sqlite.org/transactional.html

数据库所在的磁盘应该(在最坏的情况下)在将数据写入磁盘时表现得像电源故障。数据库将在下次启动时丢弃该数据。

因此,只要您的事务被提交using commit or end transaction并且执行语句的方法调用返回所有数据都已存储。否则,您的交易中的任何数据都不会被存储 - 两种情况都会让您处于一致状态。

谨防唯一的问题:你需要确保你需要一起执行的所有语句(即原子地)必须在一个事务中!