2011-06-21 66 views
8

CountDownTimer.cancel() không đang làm việc trong các mã dưới đây:CountDownTimer.cancel() không hoạt động trong Android

myTimer = new CountDownTimer(10000, 1000) { 
    public void onFinish() { 
    } 
    @Override 
    public void onTick(long millisUntilFinished) { 
     if(null != myObject){ 
      myTimer.cancel(); 
     } 
    } 
}.start(); 

Trong đoạn mã trên tôi đã bắt đầu một CountDownTimer mà kiểm tra nếu đối tượng không phải là null và hủy bỏ Timer cho phù hợp. Đối tượng được thiết lập bởi một số người nghe tại bất kỳ thời điểm nào. Vui lòng tham khảo và đề xuất. Tôi đang làm điều đúng ở đây?

Solution By Gautier Hayoun:

Chỉ cần làm một thả thay thế cho CountDownTimer rằng bạn có thể hủy từ bên trong onTick: Github link - Gautier Hayoun 12 tháng 12 '10 01:04

+0

Vấn đề có thể là bạn đang tham chiếu 'myTimer' bên trong đối tượng mới được tạo ra. Hãy thử 'this.cancel();' thay vì 'myTimer.cancel();'. – Pit

+1

đây có phải là lỗi Android không? Tôi thực sự thất vọng vì điều này. –

Trả lời

9

Solution By Gautier Hayoun:

Chỉ cần làm một thả thay thế cho CountDownTimer rằng bạn có thể hủy từ bên trong onTick: Github link - Gautier Hayoun 12 tháng 12 '10 01:04

+0

Trình xử lý này đưa ra cảnh báo 'Lớp xử lý này phải tĩnh hoặc rò rỉ có thể xảy ra'. Đọc: http://stackoverflow.com/questions/11407943/this-handler-class-should-be-static-or-leaks-might-occur-incominghandler –

5

Thay vì sử dụng CountDownTimer TimerTask

final static long INTERVAL=1000; 
final static long TIMEOUT=10000; 


TimerTask task=new TimerTask(){ 
      @Override 
      public void run() { 
       elapsed+=INTERVAL; 
       if(elapsed>=TIMEOUT){ 
        this.cancel(); 
        displayText("finished"); 
        return; 
       } 
       //if(some other conditions) 
       // this.cancel(); 
       displayText("seconds elapsed: " + elapsed/1000); 
      } 
     }; 
Timer timer = new Timer(); 
timer.scheduleAtFixedRate(task, INTERVAL, INTERVAL); 

private void displayText(final String text){ 
    this.runOnUiThread(new Runnable(){ 
     @Override 
     public void run() { 
      mTextField.setText(text); 
     } 
    }); 
} 
+2

Xác suất đếm ngược là gì? –

+1

CountDown có một số vấn đề với hủy bỏ, thường là nếu bạn gọi hủy bỏ() nó sẽ không dừng lại và bạn sẽ có 2 giờ làm việc tại một thời điểm –

Các vấn đề liên quan