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

4
Dịch vụ dạy kèm gia sư lập trình

Hôm nay mình sẽ chỉ cho bạn cách làm thế nào để khai thác các tiện ích từ Handler trong Android hiệu quả. Khi khám phá ra những tính năng vô cùng tuyệt vời này của Handlers. Mình đã thật ngạc nhiên khi biết rằng chúng thật tiện dụng 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 các 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ó chức năng giống với “listener” của các control khác trên màn hình. Điểm khác biệt là các control khác thì lắng nghe “onKey”, “onClick” còn Handlers thì là handleMessage.

Vậy, một Handler 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 để 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ỉ có thể được thực hiện 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 có thể xử lý một vài các 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 ví dụ với cách sử dụng Handler khác nhau. Bạn download ở link bên dưới nhé

Cuối cùng

Trong dự án example này, mình đã cố gắng comment rất chi tiết từng hàm để bạn có thể đọc hiểu dễ dàng. Hãy chạy code này và trải nghiệm thử Handler đi nhé, nó rất đáng để thử đó!

Dịch vụ phát triển ứng dụng mobile giá rẻ - chất lượng
Bài trướcTạo tính năng xác thực số điện thoại bằng Firebase
Bài tiếp theoXu hướng Facebook Marketing mới nhất (update 2023)
Tên đầy đủ là Dương Anh Sơn. Tốt nghiệp ĐH Bách Khoa Hà Nội. Mình bắt đầu nghiệp coder khi mà ra trường chẳng xin được việc đúng chuyên ngành. Mình tin rằng chỉ có chia sẻ kiến thức mới là cách học tập nhanh nhất. Các bạn góp ý bài viết của mình bằng cách comment bên dưới nhé !

4
Bình luận. Cùng nhau thảo luận nhé!

avatar
  Theo dõi bình luận  
Mới nhất Cũ nhất Nhiều voted nhất
Thông báo
NerryHeava
Guest
NerryHeava

Hello from Happykiddi.

Williampof
Guest
Williampof

bookmarked!!, I like your blog!

duy
Guest
duy

Thanks for share