Tôi đang cố cập nhật trạng thái giao diện người dùng khi nhận được thông báo đẩy. Để làm điều này, tôi cần phải bắt đầu một AsyncTask
thực hiện một số hoạt động mạng và sau đó cập nhật giao diện người dùng dựa trên kết quả.Sử dụng BroadcastReceiver để khởi chạy AsyncTask
Theo tài liệu cho BroadcastReceiver
, thực hiện các thao tác không đồng bộ trong bộ thu không an toàn vì quá trình thực thi nó có thể bị hủy ngay sau khi trả về.
Có phải là BroadcastReceiver
đang chạy trong quá trình riêng của mình hoặc trong cùng một quá trình với Hoạt động có chứa không? Vì tôi chỉ quan tâm đến việc hoàn thành nhiệm vụ miễn là có một giao diện người dùng để cập nhật, tôi không lo lắng về việc AsyncTask
chết nếu hoạt động bị đóng. Giả sử BroadcastReceiver là trong quá trình tương tự như các hoạt động, điều này làm cho nó okay/an toàn để khởi động nhiệm vụ tôi đã mô tả từ bên trong người nhận?
Edit:
Để làm rõ, tôi đăng ký nhận trong hoạt động của onResume()
và unregistering nó onPause()
, vì vậy nó chỉ nên được nhận ý đồ khi hoạt động đã được kích hoạt.
Tại sao không sử dụng 'Dịch vụ' thay vì BroadcastReceiver nếu nó không an toàn? Nó sẽ hoàn thành điều tương tự, nhưng không có vấn đề bạn nói đến. – Andy
@Andy Tôi hiểu rằng việc sử dụng 'Dịch vụ' sẽ an toàn trong mọi trường hợp, nhưng tôi đang cố gắng xác định xem nó có thực sự cần thiết trong trường hợp cụ thể này hay không. – jnackman
Vâng, đó là nếu bạn nghĩ về nó. Các dịch vụ hoàn hảo để chạy các hoạt động không đồng bộ. Do đó tại sao cùng một giới hạn không có mặt. BroadcastReceivers chủ yếu được sử dụng cho những thứ khác như khi một cái gì đó xảy ra trong hệ thống, không thực sự khi dữ liệu đang được cập nhật thông qua mạng. Do đó "Broadcast". Trong khi một 'Service' là nó là gì, một dịch vụ mà bạn đang chạy ở phía bên mà người dùng không cần phải biết. Hy vọng rằng có ý nghĩa. – Andy