我有AsyncTask
一个不确定的ProgressBar
,通常执行得非常快,但偶尔会很慢。当没有明显的等待时,进度条快速闪烁是不受欢迎和分散注意力的。
有没有办法在不创建另一个嵌套的情况下延迟显示进度条AsyncTask
?
我有AsyncTask
一个不确定的ProgressBar
,通常执行得非常快,但偶尔会很慢。当没有明显的等待时,进度条快速闪烁是不受欢迎和分散注意力的。
有没有办法在不创建另一个嵌套的情况下延迟显示进度条AsyncTask
?
是的,有,它被称为CountDownTimer,它的使用率很低。您可以在计时器的每个滴答声或计时器用完时采取行动。
感谢Code Droid,我能够编写一个抽象AsyncTask
类,在指定的延迟后显示一个不确定的进度条。只需扩展此类而不是AsyncTask
并确保super()
在适当的时候调用:
public abstract class AsyncTaskWithDelayedIndeterminateProgress
<Params, Progress, Result> extends AsyncTask<Params, Progress, Result> {
private static final int MIN_DELAY = 250;
private final ProgressDialog progressDialog;
private final CountDownTimer countDownTimer;
protected AsyncTaskWithDelayedIndeterminateProgress(Activity activity) {
progressDialog = createProgressDialog(activity);
countDownTimer = createCountDownTimer();
}
@Override protected void onPreExecute() {
countDownTimer.start();
}
@Override protected void onPostExecute(Result children) {
countDownTimer.cancel();
if(progressDialog.isShowing())
progressDialog.dismiss();
}
private ProgressDialog createProgressDialog(Activity activity) {
final ProgressDialog progressDialog = new ProgressDialog(activity);
progressDialog.setIndeterminate(true);
return progressDialog;
}
private CountDownTimer createCountDownTimer() {
return new CountDownTimer(MIN_DELAY, MIN_DELAY + 1) {
@Override public void onTick(long millisUntilFinished) { }
@Override public void onFinish() {
progressDialog.show();
}
};
}
我假设您在 AsyncTask 完成之前至少调用了几次 onProgressUpdate。如果是这样的话,你能做的就是这个。每次调用 onProgressUpdate 之前,调用 Thread.sleep(250)。这样,您的后台线程将在与 UI 线程通信之前暂停,并呈现出运行时间更长的任务。如果做不到这一点,我可能需要查看您的代码或获取更多信息。