tôi đã có thêm Looper để đoạn mã sau:Hiểu những gì Looper là về trong Android
public class MyRunnable implements Runnable
{
@Override
public void run()
{
Looper.prepare();
final Looper looper = Looper.myLooper();
new Handler().postDelayed(
new Runnable()
{
@Override
public void run()
{
try
{
}
catch (Exception ex)
{
}
finally
{
looper.quit();
}
}
}, 100);
Looper.loop();
}
}
Chú ý rằng tôi có một Runnable bên trong một Runnable. Runnable lồng nhau được thực hiện thông qua một Handler. Ban đầu tôi không có Looper nhưng Android phàn nàn rằng tôi cần gọi Looper.prepare trước khi thực hiện một chuỗi khác.
Tôi đọc trên Looper nhưng nó vẫn có vẻ khó hiểu. Dường như nó hoạt động như một loại đường dẫn tin nhắn nội bộ. Nó không phải là rõ ràng với tôi tại sao điều này là cần thiết vì không có tin nhắn đi từ runnable bên ngoài của tôi để runnable bên trong của tôi. Mặc dù đó là sự thật, có vẻ như Android chỉ làm cho quy tắc cứng rằng nếu bạn gọi một sợi từ một chủ đề, bạn PHẢI cũng gọi Looper.prepare. Ngay cả khi tôi chấp nhận điều đó, nó vẫn không giúp hiểu tại sao tôi cần gọi looper.loop và looper.quit. Nếu tôi bỏ qua Looper.loop, Handler của tôi không bao giờ chạy và đó là điều không rõ ràng. Looper.loop làm gì cho phép Handler của tôi chạy?
bản sao có thể có của [android: Mục đích của Looper là gì và cách sử dụng nó?] (Http://stackoverflow.com/questions/7597742/android-what-is-the-purpose-of-looper-and -Làm thế nào để sử dụng nó). Có, nếu bạn muốn sử dụng Looper, thì bạn phải gọi Looper.prepare(). Các giải pháp thay thế để sử dụng Looper bao gồm việc tạo các luồng bình thường (song song) hoặc sử dụng AsyncTasks. Đọc liên kết SO mà tôi đã trích dẫn để có thêm một chút nền tảng. 'Hy vọng rằng sẽ giúp ... – paulsm4
Sắp xếp giải thích nó. Vấn đề lớn nhất tôi thấy là đề cập đến Runnables là "tin nhắn". Đây không phải là "thông điệp" theo nghĩa truyền thống của thế giới lập trình vì Runnable là một đoạn mã thực thi hơn là dữ liệu đơn giản có chứa một thông điệp. Hơn nữa, ví dụ bạn đã chỉ ra thậm chí không bao gồm looper.quit được yêu cầu, cũng không cho biết rằng Looper.loop sẽ chặn vô thời hạn cho đến khi looper.quit được gọi. Looper nên được định nghĩa là không có gì ngoài một hàng đợi để thực hiện nhiều Runnables. – AndroidDev