5

나는 보통 매우 빠르게 실행되지만 때때로 천천히 실행되는 불확실한 ProgressBar이있는 AsyncTask이 있습니다. 인식 가능한 대기가 없을 때 진행 표시 줄이 빠르게 깜박 거리는 것은 바람직하지 않으며주의를 산만하게합니다.최소 지연 후 ProgressBar를 표시하려면 어떻게해야합니까?

다른 중첩 된 AsyncTask을 만들지 않고 진행률 표시 줄을 지연시키는 방법이 있습니까?

답변

3

덕분에 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(); 
     } 
     }; 
    } 
0

AsyncTask가 끝나기 전에 적어도 몇 번 onProgressUpdate를 호출한다고 가정합니다. 그렇다면 당신이 할 수있는 일은 이것입니다. onProgressUpdate를 호출하기 전에 Thread.sleep (250)을 호출하십시오. 이렇게하면 백그라운드 스레드가 UI 스레드와 통신하기 전에 일시 중지되어 더 오래 실행되는 작업을 수행 할 수 있습니다. 실패하면 아마 코드를 보거나 좀 더 많은 정보를 얻을 필요가 있습니다.

+0

죄송합니다,이 불확정'ProgressBar'입니다. 나는 그것을 더 즐겁게 보이게하기 위해 딜레이를 만들고 싶지 않다. 딜레이가 250ms를 초과하지 않는 한 디스플레이를 완전히 피하고 싶다. –

+0

알았어, 잡았다. 이제 나에게 더 의미가있다. 백그라운드 작업이란 무엇입니까? –

+0

이 경우에는 다른 방법으로 해결했지만 나중에는 다운로드 나 CPU 집약적 인 작업에이 내용을 적용하고 싶습니다. 일부 장치 또는 네트워크 연결은 "기다려주십시오"팝업과 다른 느린 팝업을 보증하지 않을 정도로 신속하게 응답 할 수 있습니다. 진행 막대의 표시를 지연하여 문제를 250ms 앞당기 지 않았다고 확신하지는 않습니다. 작업에 251ms가 걸리는 경우에도 깜박임/글리치는 계속 발생하지만 100ms 지연을 추가하면 약간 더 부드럽게 보이고 상대적으로 성능에 영향을 미치지 않을 수 있습니다. –

4

예, 해당 번호는 CountDownTimer이며 매우 많이 사용되지 않습니다. 타이머의 각 진드기마다 또는 타이머가 만료 될 때 조치를 취할 수 있습니다.

관련 문제