Code Droid sayesinde, belirli bir gecikme sonrasında belirsiz bir ilerleme çubuğu gösteren bir soyut AsyncTask
sınıfı yazabildim. Hemen yerine AsyncTask
bu sınıfını genişletmek ve uygun olduğunda super()
aramak emin olun:
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();
}
};
}
Maalesef, bu belirsiz 'ProgressBar' var. Sadece daha hoş görünmesini sağlamak için bir gecikme yaratmak istemiyorum, gecikme geçmediği sürece, ekran 250 ms. –
Tamam, yakaladım. Bu şimdi bana daha mantıklı geliyor. Arkaplan operasyonun nedir? –
Bu durumda başka bir şekilde çözdüm, ancak gelecekte indirmeler veya CPU yoğun operasyonlar gibi şeylere uygulamak istiyorum. Bazı cihazlar veya ağ bağlantıları, "lütfen bekleyin" açılır penceresini ve diğer daha yavaş olanları garanti etmeyecek kadar hızlı yanıt verebilir. Her ne kadar ben ilerleme çubuğunun görüntülenmesini geciktirerek sorunu 250 ms ileride değiştirmediğimize ikna olmama rağmen. Operasyon 251 ms sürdüyse, elbette hala göz kırpma/aksaklık elde edersiniz, ancak 100ms'lik bir gecikme eklemek biraz daha yumuşak görünebilir ve göreli performans etkisine sahip olmayabilir. –