对于AsyncTask

时间:2018-05-18 05:49:02

标签: java android android-asynctask sleep

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

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

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

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

但是,如果我添加Thread.sleep(5000) backupFile.length()的值有更新时间,则会成功并返回true。

是否有没有Thread.sleep(5000)

的工作

1 个答案:

答案 0 :(得分:0)

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

这个问题是通用的,我们一般来说,我们从服务器获得的数据很少,第一个活动就可以工作,然后,当用户导航到其他屏幕时,数据将在此阶段可用。 我建议考虑一下你的应用程序数据设计。您在每个步骤中需要哪些服务器数据以及如何更新它。如果您是服务器的所有者,并且您能够创建新的端点,请尝试设计快速端点,减少数据,公开“http头”操作以仅获取内容长度,... 如果您有关于您正在尝试构建的内容的更多详细信息,我将非常乐意通过具体细节。