Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 房间SQLite文件-确保所有更改都被刷新,并且文件上传中没有I/O_Android_Sqlite_Android Room_Android Architecture Components - Fatal编程技术网

Android 房间SQLite文件-确保所有更改都被刷新,并且文件上传中没有I/O

Android 房间SQLite文件-确保所有更改都被刷新,并且文件上传中没有I/O,android,sqlite,android-room,android-architecture-components,Android,Sqlite,Android Room,Android Architecture Components,我们使用Android架构组件的房间来执行数据库读/写操作 我们知道文件室正在编写的SQLite文件的位置 我们有一个要求:当应用程序退出时,我们希望启动一个后台进程(使用Android Jetpack WorkManager),将SQLite文件上传到用户云存储 @Override public void onPause() { super.onPause(); if (this.isFinishing()) { // Use Android Jetpack

我们使用Android架构组件的房间来执行数据库读/写操作

我们知道文件室正在编写的SQLite文件的位置

我们有一个要求:当应用程序退出时,我们希望启动一个后台进程(使用Android Jetpack WorkManager),将SQLite文件上传到用户云存储

@Override
public void onPause() {
    super.onPause();

    if (this.isFinishing()) {
        // Use Android Jetpack WorkManager, to 
        // upload SQLite file written by Room to user cloud storage.

我们关心的是,在执行上传之前,我们如何确保

  • 由文件室执行的所有更改都将刷新到SQLite文件
  • 在SQLite文件上载过程中,SQLite文件没有读/写操作,以避免上载“半写”(损坏)文件

    • 以下是我提出的解决方案,但您必须分部分实施:

      首先,你们可能需要那个些帮助你们确定应用程序是在前台还是后台的信息

      当应用程序转到后台时,安排执行以下任务的作业:

      将数据库复制到某个临时存储(我更喜欢缓存存储) 然后,开始将该数据库上载到服务器


      这样,您的数据库就不会以任何方式处于不一致的状态。

      AFAIK,没有自动确定这一点的好方法。如果用户手动选择某种类型的备份/上载选项(例如工具栏按钮),您可以尝试主动关闭数据库,进行上载,然后重新打开,尽管我也不确定这是否有效。这是我一直想尝试的领域之一,由于其他工作堆积,我不得不一直推迟……但是,您如何确保在复制过程中,所有更改都已刷新,并且没有IO发生在该文件上?@CheokYanCheng现在,我可以想一种方法,即如果我们可以有一个事务表,那我们就不用担心IO了。你怎么说?