2011-09-18 25 views
12

Vâng, trong android, sự khác biệt giữa là gì trong BroadcastReceivergọi một dịch vụ khác trong BroadcastReceiver? Tôi nghĩ rằng cả hai đều chạy trong nền, phải không?BroadcastReceiver vs Service

Trên thực tế, những gì tôi phải làm gì là:

Trong thời gian nhất định hàng ngày, tiến hành download kiện sử dụng (ví dụ: 9:00 ăn ăn sáng) từ cơ sở dữ liệu, và thiết lập các AlarmManager để hiển thị thông báo về sự kiện.

Bây giờ, tôi thiết lập trình quản lý báo thức để thực hiện tác vụ trên. Và tôi bối rối nên tôi trực tiếp thực hiện điều này trong BroadcastReceiver hoặc gọi dịch vụ trong BroadcastReceiver để thực hiện điều này.

Cảm ơn bạn.

Trả lời

16

Bạn nên làm xử lý ít nhất trong một BroadcastReceiver càng tốt bởi vì (trích dẫn từ Android Blog)

Khi xử lý một phát sóng, ứng dụng được đưa ra một tập cố định thời gian (hiện tại là 10 giây) để thực hiện công việc của mình. Nếu nó không hoàn thành trong thời gian đó, ứng dụng được coi là bị lỗi và quá trình của nó ngay lập tức bị ném vào hậu cảnh trạng thái bị giết cho bộ nhớ nếu cần.

5

Bạn definitelly nên gọi một dịch vụ từ người nhận cho mục đích này, nếu hành động của bạn mất một thời gian lâu hơn (kết nối với internet có thể mất một số). Máy thu phát bị giới hạn bởi lượng thời gian tối đa, chúng phải hoàn thành.

Process Vòng đời

Một quá trình mà hiện đang thực hiện một BroadcastReceiver (có nghĩa là, hiện đang chạy mã trong onReceive của nó (Context,) Phương pháp Ý định) được coi là một quá trình foreground và sẽ tiếp tục chạy bởi hệ thống ngoại trừ trong trường hợp áp lực bộ nhớ cực cao.

Khi bạn trở về từ onReceive(), BroadcastReceiver không còn hoạt động nữa, và quá trình lưu trữ của nó chỉ quan trọng như bất kỳ thành phần ứng dụng nào khác đang chạy trong đó . Điều này đặc biệt quan trọng vì nếu quá trình đó chỉ lưu trữ BroadcastReceiver (trường hợp phổ biến cho các ứng dụng mà người dùng có chưa bao giờ tương tác gần đây), sau khi trở về từ onReceive(), hệ thống sẽ xem xét quá trình trống và tích cực giết nó để tài nguyên có sẵn cho các quy trình quan trọng khác .

Điều này có nghĩa là đối với các hoạt động dài hơn, bạn thường sẽ sử dụng Dịch vụ kết hợp với BroadcastReceiver để giữ cho quá trình có chứa hoạt động trong suốt thời gian hoạt động của bạn.

từ: BroadcastReceiver

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