Hãy xem xét đoạn mã sau:Điều gì sẽ xảy ra nếu một Trình xử lý gửi một thông điệp đến một luồng sau Looper.prepare() nhưng trước khi Looper.loop() được gọi?
Looper.prepare();
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
getLooper().quitSafely();
}
};
for(int i = 0; i < urls.size(); i++) {
useCaseProvider.get().execute(callback, handler, urls.get(i), threadPool);
}
Looper.loop();
//Continue processing the results of all the use cases after the
//loop has been asked to terminated via the handler
Một nền chút: Tôi đang làm một số xử lý trên thread UI nơi tôi sẽ cần phải ping một lớn về thiết bị và làm điều gì đó với kết quả. Tôi cần phải thực hiện các yêu cầu song song để có hiệu quả.
Câu hỏi: Nếu một trong các trường hợp sử dụng bằng cách nào đó thực hiện đủ nhanh và thực hiện cuộc gọi lại trước khi tôi có thể nhấn Looper.loop(); tin nhắn sẽ được xếp hàng đợi hoặc bị mất? Các cuộc gọi lại đang được đăng lại cho chủ đề này bởi trình xử lý gửi một chuỗi chạy đến chuỗi ban đầu.
Vì vậy, về cơ bản trong đoạn trích xử lý thư của mình trên 'MessageQueue' sẽ bị trì hoãn bởi thời gian thực hiện của vòng lặp' for'. – Emmanuel
Khá nhiều. Bất kỳ nỗ lực để cung cấp cho một Looper uninitialized sẽ dẫn đến một ngoại lệ thời gian chạy. Tùy thuộc vào những gì cần thiết, một IntentService có thể là một cách tốt hơn để đi. – jagsaund