2017-01-18 21 views
5

Theo tài liệu của Handler.postDelayed(Runnable r, long delayMillis):Sự khác biệt giữa View.postDelayed() và Handler.postDelayed() trên luồng chính là gì?

Nguyên nhân r Runnable để được thêm vào hàng đợi thông điệp, được chạy sau khi khoản tiền nhất định của thời gian trôi qua. Runnable sẽ được chạy trên chuỗi mà trình xử lý này được đính kèm.

Mặt khác View.postDelayed(Runnable action, long delayMillis):

Nguyên nhân các Runnable để được thêm vào hàng đợi thông điệp, được chạy sau khi số tiền quy định thời gian trôi qua. Runnable sẽ chạy trên luồng giao diện người dùng .

Tôi muốn biết nếu có sự khác biệt giữa hai trong khi gọi chúng từ chủ đề chính và đặc biệt, nếu có sự khác biệt khi hoạt động bị hủy?

Tôi đã đọc số article về cách tôi có thể làm rò rỉ Hoạt động khi tôi sử dụng Trình xử lý lớp bên trong và tôi đã tự hỏi việc sử dụng View.postDelayed() có gây ra cùng một vấn đề hay không.

Ví dụ: foo() có thể gây ra sự cố hoặc phá hủy hoạt động có giải quyết được sự kiện là lớp học ẩn danh Runnable đang giữ tham chiếu đến hoạt động không?

public class MyActiviy extends Activity { 
    private void foo(View v) { 
     v.postDelayed(new Runnable() { 
      public void run() { 
       // some delayed work 
      } 
     }, 60000); 
     finish(); 
    } 
} 

Trả lời

8

Từ nguồn, View.postDelayed() chỉ đơn giản là sử dụng Handler.postDelayed() trên bộ xử lý nội bộ để không có sự khác biệt.

foo() có thể làm rò rỉ Hoạt động, bạn nên sử dụng View.removeCallbacks() để giảm thiểu cơ hội này.

+0

Vui lòng cung cấp liên kết cho nguồn. – CopsOnRoad

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