Bạn có thể làm một cái gì đó như thế này ..
public static final int DIALOG_DOWNLOAD_PROGRESS = 0;
private ProgressDialog mProgressDialog;
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_DOWNLOAD_PROGRESS:
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setMessage("waiting 5 minutes..");
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgressDialog.setCancelable(false);
mProgressDialog.show();
return mProgressDialog;
default:
return null;
}
}
Sau đó viết một nhiệm vụ async để cập nhật những tiến bộ ..
private class DownloadZipFileTask extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
showDialog(DIALOG_DOWNLOAD_PROGRESS);
}
@Override
protected String doInBackground(String... urls) {
//Copy you logic to calculate progress and call
publishProgress("" + progress);
}
protected void onProgressUpdate(String... progress) {
mProgressDialog.setProgress(Integer.parseInt(progress[0]));
}
@Override
protected void onPostExecute(String result) {
dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
}
}
này nên giải quyết mục đích của bạn và nó sẽ không thậm chí chặn UI lốp ..
Bạn có thể đặt tiến trình thành bất kỳ thứ gì bạn thích bằng 'setProgress()'. Chỉ cần gọi nó bất cứ khi nào bạn muốn cập nhật nó. – Geobits
Nếu thời gian đã đặt của nó tạo thanh tiến trình giả .. Có thể là gif kéo dài 5 phút. – NightSkyCode
Từ tài liệu cho 'AsyncTask' ... ** "AsyncTasks lý tưởng nên được sử dụng cho các hoạt động ngắn (một vài giây nhiều nhất.)" ** - bạn thực sự không nên chạy trong 5 phút' AsyncTask' – Squonk