Java (Android) Файловый объект слишком медленный для AsyncTask - PullRequest
0 голосов
/ 18 мая 2018

В приложении для 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, который затем возвращает ложь.

Однако, если я добавлю Thread.sleep(5000), значение backupFile.length() успеет обновить, оно будет успешным и вернет истину.

Есть ли в любом случаеесть эта работа без Thread.sleep(5000)?

1 Ответ

0 голосов
/ 18 мая 2018

Это нормально, работа в сети займет больше времени, чем загрузка вашей первой активности.Если ваше первое действие требует, чтобы этот файл (или его часть) работал, вам нужно получить его с сервера (да! В асинхронной задаче) и обновить объект, на который будет опираться ваше приложение.Отсоедините логику / дизайн вашего приложения от источника данных.

Эта проблема является общей, то, что мы делаем в целом, мы получаем как минимум данных от сервера для первого действия, а затем, когда пользовательперейти к другим экранам, данные будут доступны на этом этапе.Я бы предложил подумать о дизайне данных вашего приложения.Какие данные сервера вам нужны на каждом этапе и как они будут обновляться.Если вы являетесь владельцем сервера и можете создавать новые конечные точки, попробуйте спроектировать быстрые конечные точки с меньшим объемом данных, выставьте операции «http head», чтобы получить только длину содержимого, ... Если у вас есть более подробная информация оТо, что вы пытаетесь построить, я буду более чем рад пройтись по конкретике.

...