UIThread là luồng chính để thực thi cho ứng dụng của bạn. Đây là nơi hầu hết mã ứng dụng của bạn được chạy. Tất cả các thành phần ứng dụng của bạn (Các hoạt động, Dịch vụ, Trình cung cấp nội dung, BroadcastReceivers) đều được tạo trong luồng này và mọi cuộc gọi hệ thống đến các thành phần đó được thực hiện trong luồng này.
Ví dụ: giả sử ứng dụng của bạn là một lớp Hoạt động. Sau đó, tất cả các phương thức vòng đời và hầu hết mã xử lý sự kiện của bạn được chạy trong UIThread này. Đây là các phương pháp như onCreate
, , onDestroy
, onClick
, v.v. Ngoài ra, đây là nơi tất cả các bản cập nhật cho giao diện người dùng được thực hiện. Bất kỳ điều gì làm cho giao diện người dùng được cập nhật hoặc thay đổi HAS xảy ra trên chuỗi giao diện người dùng.
For more info on your application's Processes and Threads click here.
Khi bạn sinh ra một cách rõ ràng một chủ đề mới để làm việc ở chế độ nền, mã này không chạy trên UIThread. Vì vậy, điều gì sẽ xảy ra nếu chủ đề nền này cần phải làm điều gì đó thay đổi giao diện người dùng? Đây là nội dung của runOnUiThread
. Trên thực tế, bạn phải sử dụng một Trình xử lý (xem liên kết bên dưới để biết thêm thông tin về điều này). Nó cung cấp các chủ đề nền này khả năng thực thi mã có thể sửa đổi giao diện người dùng. Họ làm điều này bằng cách đặt mã UI-sửa đổi trong một đối tượng Runnable và chuyển nó sang phương thức runOnUiThread.
For more info on spawning worker threads and updating the UI from them click here
Cá nhân tôi chỉ sử dụng phương pháp runOnUiThread
trong thử nghiệm Instrumentation tôi. Vì mã thử nghiệm không thực thi trong UIThread, bạn cần sử dụng phương thức này để chạy mã để sửa đổi giao diện người dùng. Vì vậy, tôi sử dụng nó để tiêm nhấp chuột và các sự kiện quan trọng vào ứng dụng của tôi. Sau đó tôi có thể kiểm tra trạng thái của đơn đăng ký để đảm bảo những điều chính xác đã xảy ra.
For more info on testing and running code on the UIThread click here
Giải thích tuyệt vời, liên kết đặc biệt cho các nguyên tắc cơ bản của ứng dụng phải đọc cho tất cả người mới bắt đầu như tôi :) –
Bạn không nên sử dụng 'AsyncTask' thay vì' runOnUiThread' trong hầu hết các trường hợp? – JDJ
@JDJ 2 kỹ thuật có các mục đích khác nhau: 'AsyncTask' sẽ giúp bạn TẮT chủ đề chính, vào nền; 'runOnUiThread()' sẽ đưa bạn ONTO chủ đề chính, từ nền. Vì vậy, nó phụ thuộc vào những gì bạn đang cố gắng để thực hiện. –