Nhờ Code Droid, tôi đã có thể viết một lớp trừu tượng AsyncTask
cho biết thanh tiến trình không xác định sau một độ trễ được chỉ định. Chỉ cần mở rộng lớp này thay vì AsyncTask
và chắc chắn để gọi super()
khi thích hợp:
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();
}
};
}
Nguồn
2012-07-27 19:43:13
Xin lỗi, nó là một không xác định 'ProgressBar'. Tôi không muốn tạo ra một sự chậm trễ chỉ để làm cho nó xuất hiện dễ chịu hơn, tôi muốn tránh hiển thị hoàn toàn trừ khi sự chậm trễ bắt đầu vượt quá, nói, 250ms. –
OK, đã nhận. Điều đó có ý nghĩa hơn với tôi bây giờ. Hoạt động nền của bạn là gì? –
Tôi đã giải quyết nó theo cách khác trong trường hợp này, nhưng trong tương lai tôi muốn áp dụng điều này cho những thứ như tải xuống hoặc hoạt động chuyên sâu của CPU. Một số thiết bị hoặc kết nối mạng có thể phản hồi đủ nhanh để không đảm bảo cửa sổ bật lên "vui lòng đợi" và các thiết bị khác có thể chậm hơn. Mặc dù tôi không tin rằng chúng tôi đã không chỉ chuyển vấn đề 250 ms trước bằng cách trì hoãn hiển thị thanh tiến trình. Nếu hoạt động mất 251 ms, tất nhiên bạn vẫn sẽ nhận được blink/glitch, nhưng sau đó thêm một sự chậm trễ 100ms có thể làm cho nó trông một chút mượt mà và không có tác động hiệu suất tương đối nhiều. –