若要完成线程的等待(Android)

若要完成线程的等待(Android)

问题描述:

我想上传一些文件。我在for循环中使用以下源代码:若要完成线程的等待(Android)

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

这工作正常。我在哪里以及如何检查线程何时完成?我需要在for循环中暂停,只要线程正在工作。我怎样才能做到这一点 ?

+1

您可以使用AsyncTask.https://developer.android.com/reference/android/os/AsyncTask.html –

+1

您不想在上传时“暂停”。这可能需要很长时间,具体取决于大小和网络速度。如果您阻止等待此线程完成,您的用户界面将无响应,并且由于ANR,该框架可能会终止您的应用程序。 –

+0

如果应用程序转到背景,线程会发生什么? AsyncTask和上面的源代码有什么区别? –

您应该使用异步任务。这是一种让你获得进步和结束信息的线程。

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开发者

onProgressUpdateonPostExecute分别被称为当它完成进度的变化和时间。