Tôi có mã Android/java cũ, chứa hai nguồn gốc từ IntentService
, và các dịch vụ này không phải chạy trong các quy trình riêng biệt.LiveData vs Handler và LocalBroadcast
Câu hỏi đặt ra là cách trả lại kết quả từ các số IntentService
này.
Một kết quả lợi nhuận dịch vụ bằng cách sử dụng Handler
+ Runnable
, để chạy mã trong vòng lặp chính:
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
MyApplication.get().setFoo(someThing);
}
});
một trong những khác là sử dụng LocalBroadcastManager.getInstance(this).sendBroadcast(in);
để gửi thông điệp tới Activity
, và Activity
đăng ký qua BroadcastReceiver
trên tin nhắn trong onResume
, và hủy đăng ký trong .
Tôi có đúng không và trong cả hai trường hợp, bạn có thể sử dụng LiveData
để đơn giản hóa mọi thứ?
IntentService
nên tạo LiveData
và những người muốn kết quả nên observe
nó, và khi dữ liệu mới đến IntentService
nên gọi postValue
, hoặc có thể có một số rạn để ngăn chặn việc sử dụng của LiveData
đây?
bạn đã kiểm tra điều này: https://stackoverflow.com/questions/44204978/how-to-update-livedata-of-a-viewmodel-from-background-service-and-update-ui –
có bạn có thể thực hiện việc này –
Sử dụng Trình nhận kết quả cho hoạt động liên lạc IntentService, bạn có thể trao đổi dữ liệu giữa các thành phần này. Nó rất hữu ích cho giải pháp thay thế. –