Handler trong Android là gì? Bạn biết cách dùng chưa? – VNTALKING

Related Articles

Hôm nay mình sẽ chỉ cho bạn cách làm thế nào để khai thác những tiện ích từ Handler trong Android hiệu suất cao. Khi tò mò ra những tính năng vô cùng tuyệt vời này của Handlers. Mình đã thật quá bất ngờ khi biết rằng chúng thật tiện lợi và dễ sử dụng .

Handler là gì ?

Đầu tiên, Handlers không phải là một khái niệm mới, chúng đã có từ rất lâu. Cụ thể là bao lâu ? Theo mình được biết thì là từ thời API level 1 rồi. Mặc dù vậy, mình vẫn luôn cảm thấy những bạn vẫn chưa thực sự khai thác triệt để, kể cả mình cũng vậy ^ ^ .

Có thể hiểu Handler là một class khi khai báo trong ứng dụng nó sẽ có công dụng giống với “ listener ” của những control khác trên màn hình hiển thị. Điểm độc lạ là những control khác thì lắng nghe “ onKey ”, “ onClick ” còn Handlers thì là handleMessage .

Vậy, một Handler hoàn toàn có thể làm gì ?

  • Sắp xếp và xử lý các messages
  • Sắp xếp và thực hiện các Runnables
  • Có thể chạy trên một Thread khác nơi mà Handler được tạo ra
  • Có thể tái sử dụng nhiều lần khi cần

Cách sử dụng Handler trong android

Tìm hiểu cách sử dụng Handler trong Android

Handler trong android có một hạn chế là “ sự không rõ ràng ”. Nó không phải là một Runnable, mà cũng không phải là Thread

Bạn có thể xem Handler như là một cơ chế cao cấp để xử lý hàng đợi. Việc hàng đợi này chứa Messages hay Runnables, hay việc chúng nên được xử lý trên main thread hay các background thread không quan trọng.

Handler vẫn sẽ được tạo ra để giải quyết và xử lý đống Messages này, từng cái một. Và đây chính là điều cần phải nhớ .

Một ví dụ điển hình của việc sử dụng Handler: khi bạn có một Runnable và bạn làm gì đó với background android thread. Và đến một lúc – bạn muốn cập nhật dữ liệu lên UI.

Trong trường hợp này, bạn hãy gán giá trị cần cập nhật cho Handler bằng cú pháp new Handler(Looper.getMainLooper). Sau đó gọi handler.post()thực hiện công việc của UI bên trong post(). Thật tuyệt phải không nào?

private void postTaskInsideBackgroundTask() { Thread backgroundThread = new Thread(new Runnable() { @Override public void run() { // pretend to do something "background-y" try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } mainThreadHandler.post(new Runnable() { @Override public void run() { tv04.setText("Hi from a Handler inside of a background Thread!"); } }); } }); backgroundThread.start(); }

Chúng ta đều biết rằng, một AsyncTask chỉ hoàn toàn có thể được triển khai một lần. Điều này không xảy ra với Handlers .

Thậm chí có một lớp đặc biệt quan trọng hoàn toàn có thể giải quyết và xử lý một vài những Handlers cùng lúc đó là HandlerThread .

HandlerThread có thể thay phiên xử lý cho cả Looper, một cách tự động. Vì vậy bạn không cần phải lo lắng về điều này.

Để cho bạn thấy được sự khác nhau giữa Handler, Thread và Runnable. Mình đã tạo ra một dự án Bất Động Sản ví dụ với cách sử dụng Handler khác nhau. Bạn tải về ở link bên dưới nhé

Cuối cùng

Trong dự án Bất Động Sản example này, mình đã cố gắng nỗ lực comment rất cụ thể từng hàm để bạn hoàn toàn có thể đọc hiểu thuận tiện. Hãy chạy code này và thưởng thức thử Handler đi nhé, nó rất đáng để thử đó !

More on this topic

Comments

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Advertismentspot_img

Popular stories