2016-07-07 11 views
-1

いくつかのファイルをアップロードしたい。 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

アップロード中に「一時停止」したくない場合があります。サイズやネットワークの速度によっては時間がかかることがあります。このスレッドの待機をブロックして終了すると、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"); 
} 

}

出典:Androidデベロッパー

onProgressUpdateonPostExecuteそれぞれときの進行状況の変化と呼ばれ、それが行われたとき。

関連する問題