Android 掉电数据丢失问题

在Android中使用数据库存储数据,查询时已经能查到,设备掉电关机再打开,发现已经存上的数据丢了一部分,现在怀疑是sqlite执行再闪存中,未来得及同步到磁盘,掉电导致数据丢失。
解决方案,将数据库同步模式改为全量同步。litepal未提供这个配置,在初始化之后直接调用sql语句也能实现。

         LitePal.initialize(this)
        //更改同步模式,避免掉电数据丢失
        LitePal.getDatabase().execSQL("PRAGMA synchronous = FULL;")

存储的文件即使在文件管理器里已经能看到,突然掉电也可能丢失,可以用下边的方式手动同步。

          try {
                    //已经写入数据的文件,例如照相返回的文件。
                    val file = File(path)
                    //关键
                    //同步文件到磁盘,true,追加模式,避免重新创建这个文件导致文件是0kb
                    val fos = FileOutputStream(file, true)
                    fos.fd.sync()
                    fos.close()

                  //如果是要创建新文件,直接用fos写入数据,不需要追加模式了。
                } catch (e: Exception) {
                    e.printStackTrace()
                }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容