2012-07-10 32 views
9

Tôi muốn biết ý nghĩa chính xác của removeCallbacks (Runnable r) trong Handler là gì. Tôi đã đi qua documentation của nó và nó chỉ đơn giản nói "Hủy bỏ bất kỳ bài viết đang chờ xử lý của Runnable r có trong hàng đợi tin nhắn".Ý nghĩa của removeCallbacks (Runnable r) trong Handler trong Android

Bây giờ câu hỏi của tôi là nếu thông báo của tôi đã được xử lý bởi trình xử lý của tôi và ở giữa nếu tôi gọi removeCallbacks, liệu nó có dừng xử lý thông báo hoàn thành một nửa của tôi không? Hoặc ngay cả khi tôi gọi removeCallbacks tin nhắn đã được xử lý bởi trình xử lý của tôi (khi tôi gọi post(Runnable r)) sẽ được thực hiện?

Trả lời

8

Chạy chỉ nên được thực thi khi chúng xuất hiện trong hàng đợi thư, vì vậy nếu thư của bạn đã bắt đầu xử lý, nó sẽ không được thực hiện bằng cách gọi removeCallbacks. Nó phải đã được loại bỏ, vì vậy nó sẽ tiếp tục xử lý.

+0

OK ... Cảm ơn bạn thân .. !!! – AndroDev

+0

Xin chào Bill ... Một điều nữa .. Nếu tôi sử dụng tác vụ async và khi chạy trong onPostExecute và sau đó tôi gọi asynctask.cancel (true), trong trường hợp đó, onPostExecute cũng sẽ bị hủy? – AndroDev

+0

@AndroDev Tôi không biết. Điều đó sẽ được đăng dưới dạng câu hỏi riêng. –

10

Khi bạn tạo Handler mới, nó sẽ bị ràng buộc vào hàng đợi chuỗi/thư của chuỗi đang tạo nó. Từ thời điểm đó, nó sẽ gửi các tin nhắn và runnables đến hàng đợi tin nhắn đó và thực thi chúng khi chúng xuất hiện trong hàng đợi thông báo. removeCallbacks chỉ đơn giản là loại bỏ những runnables người chưa bắt đầu xử lý từ hàng đợi.

+0

Cảm ơn bạn Alex. – AndroDev