2016-07-07 2 views
-1

Я хочу загрузить некоторые файлы. Я использую следующий исходный код для цикла:Ожидать потока, если он закончен (Android)

Thread uploadThread = new Thread() { 
    @Override 
    public void run() { 
     uploadFile(sourcePath, destPath); 
    } 
}; 
uploadThread.start(); 

Это работает нормально. Где и как я могу проверить, когда поток завершен? Мне нужна пауза в for-loop, так что поток работает. Как я могу это сделать ?

+1

вы можете использовать AsyncTask.https: //developer.android.com/reference/android/os/AsyncTask.html –

+1

Вы не хотите «приостанавливать» во время загрузки. Это может занять много времени в зависимости от размера и скорости сети. Если вы заблокируете ожидание в этом потоке, ваш пользовательский интерфейс будет не отвечать на запросы, и инфраструктура может убить ваше приложение из-за ANR. –

+0

Что происходит с потоком, если приложение переходит на задний план? И в чем разница между AsyncTask и исходным кодом выше? –

ответ

0

Вы должны использовать задачу Async. Это своего рода поток, который позволяет вам добиваться прогресса и заканчивать информацию.

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> { 

    protected Long doInBackground(URL... urls) { 
    int count = urls.length; 
    long totalSize = 0; 
    for (int i = 0; i < count; i++) { 
     totalSize += Downloader.downloadFile(urls[i]); 
     publishProgress((int) ((i/(float) count) * 100)); 
     // Escape early if cancel() is called 
     if (isCancelled()) break; 
    } 
    return totalSize; 
    } 

protected void onProgressUpdate(Integer... progress) { 
    setProgressPercent(progress[0]); 
} 

protected void onPostExecute(Long result) { 
    showDialog("Downloaded " + result + " bytes"); 
} 

}

Источник: Android Разработчик

onProgressUpdate и onPostExecute называются соответственно при изменении прогресса и когда это будет сделано.