2011-10-26 39 views
8

Tôi muốn biết liệu có khởi động asynctask từ bộ thu phát sóng được coi là thực tế không? Tôi về cơ bản đã đăng ký với máy chủ C2DM của google và sau đó khi tôi chặn máy thu phát được đăng ký, tôi muốn gửi nó đến máy chủ của mình.bắt đầu một asynctask từ bộ thu sóng phát sóng

cách tốt nhất để hoàn thành điều này là gì?

Trả lời

18

Có, đây được coi là thực hành không tốt. Đó là bởi vì nếu bạn bắt đầu AsyncTask từ BroadcastReceiver Android có thể giết quá trình của bạn nếu onReceive() được trả lại và không có thành phần hoạt động nào khác đang chạy.

Cách chính xác sẽ là bắt đầu Service từ BroadcastReceiver. Và điều này Service nên quản lý AsyncTask. Bằng cách này, Android sẽ biết về thành phần hoạt động và Android sẽ không giết nó sớm (trừ khi các điều kiện quan trọng khác phát sinh, như không đủ điều kiện bộ nhớ).

+0

@inazruk cảm ơn – Hades

+1

nếu bạn có tham chiếu đến ngữ cảnh ứng dụng trong tác vụ không đồng bộ thì sao? liệu hệ thống vẫn có thể giết chết quá trình một khi onReceive() trả về? – 500865

+0

Xác suất của quá trình bị giết là hoàn toàn không liên quan đến những người có tham chiếu đến những gì bên trong quá trình này. Xác suất bị giết rất phụ thuộc vào những thành phần nào hiện đang hoạt động trong tiến trình, và giai đoạn nào trong vòng đời của chúng. – inazaruk

2

Bắt đầu với Honeycomb, bạn có thể gọi goAsync() và sau đó bạn có 10 giây để thực hiện công việc của mình một cách không đồng bộ.

Ví dụ về cách sử dụng có thể được hiển thị here.

Các vấn đề liên quan