2011-09-13 25 views
28

Nếu tôi có handler.postDelayed luồng đã được thực hiện và tôi cần phải hủy nó?Làm thế nào để hủy handler.postDelayed?

+0

Toàn bộ chuỗi hoặc chỉ thư? –

+0

Toàn bộ chuỗi. – Eugene

+0

[Thoát] (http://developer.android.com/reference/android/os/HandlerThread.html#quit()). –

Trả lời

46

Tôi thực hiện việc này để hủy bài đăngDelays, trên Android: removeCallbacks xóa mọi bài đăng đang chờ xử lý của Runnable r nằm trong hàng đợi thư.

handler.removeCallbacks(runnableRunner); 

hoặc sử dụng để loại bỏ tất cả các thông điệp và callbacks

handler.removeCallbacksAndMessages(null); 
+0

Thông tin thêm với snipet: http://stackoverflow.com/questions/5885587/how-to-cancel-handler-in-code – Basher51

9

Nếu bạn không muốn giữ một tài liệu tham khảo của Runnable, bạn chỉ có thể gọi:

handler.removeCallbacksAndMessages(null); 

The official documentation nói :

... Nếu mã thông báo là null, al l callbacks và tin nhắn sẽ được gỡ bỏ.

0

Tôi đã có một trường hợp mà tôi cần hủy một postDelayed trong khi nó đang trong quá trình chạy, vì vậy mã ở trên không hoạt động cho ví dụ của tôi. Những gì tôi đã kết thúc làm là có một kiểm tra boolean bên trong Runnable của tôi vì vậy khi mã được thực hiện sau thời gian nhất định nó sẽ hoặc là cháy dựa trên những gì giá trị boolean tại thời điểm đó và làm việc cho tôi.

public static Runnable getCountRunnable() { 
    if (countRunnable == null) { 
     countRunnable = new Runnable() { 
      @Override 
      public void run() { 
       if (hasCountStopped) 
        getToast("The count has stopped"); 
      } 
     }; 
    } 
    return countRunnable; 
} 

FYI - trong hoạt động phá hủy Tôi sử dụng mã do các nhà phát triển khác, handler.removecallback và handler = null đề xuất; để hủy bỏ các xử lý chỉ để giữ cho mã sạch sẽ và chắc chắn rằng tất cả mọi thứ sẽ được gỡ bỏ.

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