2011-06-11 3 views
1

설정 : 4 단계의 활동을 통해 postdelayed 처리기를 사용하여 두 개 이상의 중첩 된 postdelays를 일시 중지합니다.지연된 처리기/실행 가능 파일에서 일시 중지/대기하고 일시 중지 된 코드를 계속 활성화합니다.

타임 라인 :

1 단계 | 코드 발사 | 2 단계 | 코드 발사 | 3 단계 | 코드 발사 | stage4

스테이지 1 : 사용자 상호 작용 : 비활성화 (대부분) countdowntimer

스테이지 3를 포함하여 사용자에 대한 시각과 : 2 countdowntimer

stage4와 비활성화를 비활성화, 그냥

스테이지 2에 AlertDialog 정의를 보여줍니다 카운트 다운 또는 추가 중지 없음

버튼을 누르면 사용자가 스테이지 2로 건너 뛸 수 있기를 원합니다. 그러면 카운트 다운 타이머와 사후 지연이 취소됩니다 (wi 두 번째와 각각을 개별적으로 취소하려고했지만 성공하지 못했습니다. 여기에 사용한 명령이 있습니다.

countdowntimer.cancel(); // this didn't work from the button or a void call 
    handler.removeCallbacks(runnable); // want to skip to end of stage2 

시도/catch에 대한 참조가 있거나 검색에서 스레드를 사용하고 있지만 사용법이 확실하지 않거나 적절한 경우를 보았습니다.

입력 해 주셔서 감사합니다.

** 비 작동 코드 참조 편집 : * 내가 어떤을 살해} 또는 경우에 내가 관련이없는 물건의 대부분, 확실하지 절단; 추가

public class Main extends Activity { 

public Boolean onOffCDT = true; 
public Handler handler2Mem; 
public Runnable mem2Runnable = null; 
public CountDownTimer aCounter; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    aCounter = null;   
    final Handler handlerMem = new Handler(); 
    final Runnable memRunnable = new Runnable() { 

     public void run() { 
     //code 
       final CountDownTimer aCounter = new CountDownTimer(memTime, 100) { 

       public void onTick(long millisUntilFinished) { 
        //update time 
        if(onOffCDT.equals(false)) { 
         onOffCDT = true; 
    //     aCounter.cancel(); 
        } 
       } 

       public void onFinish() { 
        title.setText(tempTitle); 
       } 
     }; 
      aCounter.start();    


    Handler handler2Mem = new Handler(); 
    Runnable mem2Runnable = new Runnable() { 
     public void run() { 
      //code 
      CountDownTimer bCounter = new CountDownTimer(8000, 100) { 

       public void onTick(long millisUntilFinished) { 
      //update time 
       } 

       public void onFinish() { 
        title.setText(tempTitle); 
       } 
       }; 
      bCounter.start(); 
      stage3(8000); //another delay    
     }; 
    }; handler2Mem.postDelayed(mem2Runnable, memTime); 


    }  

}; handlerMem.postDelayed(memRunnable, 2500); 

    submit.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      // this button checks stage#, if stage4 info - else...  
      }else{ 
      aCounter.cancel(); 
       onOffCDT = false; 
       cancelCountDown(mem2Runnable, handler2Mem); 
      } 
     } 

    }); 

    } 

private void stage3 (Integer tTime) { 
    Handler handler = new Handler(); 
      handler.postDelayed(new Runnable() { 
      public void run() { 
       //Do Stuff 

     } 
    }, tTime); 
} 

public void cancelCountDown(Runnable run2, Handler hand2) { 

     hand2.removeCallbacks(run2); 

} 
+0

그래서 ...의 STA를 취소 할 경우 true로 설정? 다른 누군가? – Toclmi

답변

0

단순히 방법에 if ((boolean)canceled)return을 추가하고 구제

+0

당신이 쓴 것을 따르지 않으면 초기화되지 않았기 때문에이 두 부분에 변수를 설정할 수 없게됩니다. Final 또는 public을 사용하면 코드에서 사용할 수 있지만 코드와 관련하여 여전히 시작되지는 않습니다. – Toclmi

+0

대신 메서드에서 대신 선언하고 null로 설정하십시오. –

+0

시도해 주셔서 감사하지만 안드로이드/자바에 익숙하지 않아서 당신이 말하는 것은 저에게 모호합니다. 내 이해는 메서드는 기본적으로 "private void ..."를 preform하거나 "private String/etc ..."(VB에서 이해할 수있는 Sub/Function) 반환을 제공하도록 정의 된 코드 집합이라고합니다. 클래스가 액티비티 코딩에 대한 과도한 정의? CountDownTimer 클래스와 Handler/Runnable 클래스가 아닌가? 클래스를 사용하여 클래스를 정의해야합니까?이 한 가지는 정말 저에게 쓰레기를 짜증나게하므로 무언가를 성취하기 위해 많은 시간을 낭비하고 있습니다. 거의 무언가가 훨씬 간단해야합니다. – Toclmi

관련 문제