非同期タスクを使用する必要があります。これは進行状況と終了情報を取得するためのスレッドの一種です。
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それぞれときの進行状況の変化と呼ばれ、それが行われたとき。
AsyncTask.https://developer.android.com/reference/android/os/AsyncTask.html –
アップロード中に「一時停止」したくない場合があります。サイズやネットワークの速度によっては時間がかかることがあります。このスレッドの待機をブロックして終了すると、UIが応答しなくなり、フレームワークがANRのためにアプリを終了させる可能性があります。 –
アプリがバックグラウンドに移行すると、スレッドはどうなりますか? AsyncTaskと上記のソースコードとの違いは何ですか? –