2016-07-07 8 views
-1

일부 파일을 업로드하고 싶습니다. for 루프에 다음 소스 코드를 사용합니다.완료되면 스레드 대기 (안드로이드)

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

업로드하는 동안 "일시 중지"하지 않으려합니다. 크기와 네트워크 속도에 따라 시간이 오래 걸릴 수 있습니다. 이 스레드가 끝나기를 기다리는 것을 차단하면 UI가 응답하지 않으며 프레임 워크가 ANR로 인해 앱을 종료시킬 수 있습니다. –

+0

앱이 백그라운드로 이동하면 스레드는 어떻게됩니까? AsyncTask와 위 소스 코드의 차이점은 무엇입니까? –

답변

0

비동기 작업을 사용해야합니다. 이것은 진행 상황과 종료 정보를 얻을 수있는 종류의 스레드입니다.

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"); 
} 

}

출처 :시 진행 상황 변화와 때 완료

onProgressUpdateonPostExecute 각각라고 안드로이드 개발자.