Java (Android) 文件对象对于 AsyncTask 来说太慢了

Java (Android) File object too slow for AsyncTask

在我正在开发的 Android 应用程序中,我需要创建一个文件的备份并检查启动时它是否与远程文件相同,如果它们有不同的字节则覆盖使用远程文件备份,然后检查它们是否相同,如果它们相同 return true。为此,我有以下过程:

if(!backupFileExists(){
     backupFile.createNewFile();
}

if(!checkBackupAndRemoteFilesAreIdentical()){ <----First Time
    if(overwriteBackupFileWithRemoteFile()){
        if(checkBackupAndRemoteFilesAreIdentical()){ <---- Second Time
            return true;
        }
    }
}
return false;

问题是当我 运行 代码使用 AsyncTask 时,第二次 运行 checkBackupAndRemoteFilesAreIdentical() backupFile.length() 的值没有更新,所以它returns 0 然后 returns false。

但是如果我添加 Thread.sleep(5000) backupFile.length() 的值有时间更新,它是成功的并且 return 是真的。

有没有没有 Thread.sleep(5000) 的这项工作呢?

这是正常现象,网络操作比第一次加载需要更长的时间 activity。 如果您的第一个 activity 需要此文件(或其中的一部分)才能工作,那么您需要从服务器获取它(是的!在异步任务中)并更新您的应用程序将依赖的对象在。将您的应用程序 logic/design 与数据源分离。

这个问题是一个普遍问题,我们通常所做的是,我们从服务器获取尽可能少的数据,以便第一个 activity 工作,然后,当用户导航到其他屏幕时,数据将在此阶段可用。 我建议考虑您的应用程序数据设计。您在每个步骤中需要哪些服务器数据以及如何更新这些数据。如果您是服务器的所有者,并且能够创建新端点,请尝试设计快速端点、更少数据、公开 'http head' 操作以仅获取内容长度,... 如果您对要构建的内容有更多详细信息,我将非常乐意详细说明。