2012-08-28 1 views
1

일부 실행 중 표시되는 진행 대화 상자가 있습니다.제한된 시간 동안 만 진행률 대화 상자 숨기기

조치가 주어진 시간 동안 실행되지 않은 경우, 대화 상자와 조치를 닫으려고합니다. 어떻게 구현합니까?

나는 현재 중지하고 내 비동기 행동과 대화를 시작 이러한 두 가지 방법을 가지고 :

private void startAction() 
{ 
    if (!actionStarted) { 
     showDialog(DIALOG_ACTION); 
     runMyAsyncTask(); 
     actionStarted = true; 
    } 
} 

private void stopAction() 
{ 
    if (actionStarted) { 
     stopMyAsyncTask(); 
     actionStarted = false; 
     dismissDialog(DIALOG_ACTION); 
    } 
} 

즉, 시간이 다 될 때 나는 이런 식으로 뭔가를 할 :

onTimesOut() 
{ 
    stopAction(); 
    doSomeOtherThing(); 
} 
+0

사용 TimerTask를 그것이 당신의 인생을 쉽게 만들 것입니다. 주어진 시간 내에 시작되지 않으면 비동기 작업을 취소하는 고정 된 시간 후에 작업을 실행합니다. –

답변

1

당신 간단한 타이머를 만들 수 있습니다 :

Timer timer = new Timer(); 
TimerTask task = new TimerTask() { 

    @Override 
    public void run() { 
     stopAction(); 
    } 
}; 

timer.schedule(task, 1000); 
+0

죄송합니다. 시간을 초과하기 전에 내 비동기 작업을 중지 할 수 있다는 것을 잊어 버렸습니다. 그런 다음 타이머도 취소해야합니다. stopAction() 메소드에서이를 간단하게 취소하는 것만으로 충분합니까? asyncTask의 postExecute에서 – Ksice

+0

을 호출하면 timer.cancel()을 호출 할 수 있습니다. – AlexMok

1

나는 Thread 또는 01을 사용해야한다고 생각합니다.. X 초 동안 멈추고 작업이 아직 끝나지 않은 경우 강제로 끝내고 대화 상자를 닫습니다.

그래서 하나의 구현이 될 수 :

private void startAction() { 
    if (!actionStarted) { 
     actionStarted = true; 
     showDialog(DIALOG_ACTION); //This android method is deprecated 
     //You should implement your own method for creating your dialog 
     //Run some async worker here... 
     TimerTask task = new TimerTask() { 
      public void run() { 
       if (!actionFinished) { 
        stopAction(); 
        //Do other stuff you need... 
       } 
      } 
     }); 
     Timer timer = new Timer(); 
     timer.schedule(task, 5000); //will be executed 5 seconds later 
    } 
} 

private void stopAction() { 
    if (!actionFinished) { 
     //Stop your async worker 
     //dismiss dialog 
     actionFinished = true; 
    } 
}