2013-06-16 22 views
14

Ai đó có thể giải thích lý do tại sao Trình xử lý đăng tải một lần chạy? Không ghi đè handleMessage và gửi một tin nhắn làm điều tương tự?Android: Tại sao các Trình xử lý đăng một lần chạy?

Tôi đã viết một số mã chưa được kiểm tra để cho biết cách tôi nghĩ hai cách này sẽ được triển khai như thế nào. Xin vui lòng sửa tôi nếu tôi sai trong cách tiếp cận của tôi.

Handler với bài viết:

handler.post(new Runnable() { 
    @Override 
    public void run() { 
     imageView.doSomething(); 
    } 
}); 

Handler với handleMessage:

final Handler handler = new Handler() { 
    @Override 
    public void handleMessage(Message message) { 
     imageView.doSomething(); 
    } 
}; 

handler.sendMessage(message); 

Trả lời

11

Cả hai đoạn mã làm việc như nhau, thông thường bạn sử dụng Handler.postRunnable khi bạn muốn thực hiện một số mã trên Chủ đề giao diện người dùng mà không cần phải biết bất kỳ điều gì về đối tượng xử lý của bạn. Điều này có ý nghĩa trong nhiều trường hợp cần phải thực thi mã tùy ý trên Giao diện người dùng UI.

Nhưng trong một số trường hợp, bạn muốn tổ chức những gì đang được gửi đến UI Chủ đề và có chức năng cụ thể mà bạn muốn thực hiện cách mà bạn có thể sử dụng SendMessage.

Tôi không nghĩ rằng có một hình phạt hiệu suất để sử dụng một trong hai bên trên khác. Điều đó tuỳ thuộc vào bạn, để sử dụng bất cứ điều gì bạn nghĩ phù hợp với bạn nhiều hơn.

+0

Vâng, có hiệu suất rất nhỏ để tạo đối tượng mới (runnable). Nhưng nó không đáng kể. – eordano

+2

Tuy nhiên, nếu bạn muốn thực thi mã trên Giao diện người dùng, bạn phải tạo Trình xử lý trong Chủ đề giao diện người dùng hoặc sử dụng "Trình xử lý mới (Looper.getMainLooper())". Với "trình xử lý mới()", bạn tạo một Trình xử lý trong luồng hiện tại, không cần phải là chủ đề chính. – Kuno

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