5

Tài liệu cho AlarmManager startes rằngAlarmManager không hoạt động khi ứng dụng là lực lượng đóng

Lưu ý: Quản lý báo động là để dành cho trường hợp bạn muốn có mã ứng dụng chạy của bạn tại một thời điểm cụ thể, ngay cả khi ứng dụng của bạn hiện không chạy. Đối với các hoạt động định thời bình thường (tick, timeouts, vv) thì việc sử dụng Handler sẽ dễ dàng và hiệu quả hơn nhiều.

Tuy nhiên, khi ứng dụng của tôi bị đóng (lực đóng từ trình quản lý tác vụ) báo thức của tôi không hoạt động và phương thức OnReceive không bao giờ được gọi trong bộ thu sóng. Tôi đang nhắm mục tiêu 4.x.

Điều gì đang xảy ra?

+0

vui lòng cho chúng tôi biết bạn đang thiết lập báo động, và các mục trong biểu hiện của bạn cho người nhận báo thức. –

+4

Khi một lực tác động xảy ra, tất cả các đối tượng liên kết với ứng dụng đó sẽ bị xóa và do đó trình quản lý cảnh báo cũng bị xóa. Tài liệu có thông tin khi ứng dụng ở trong tình trạng "bình thường", tức là không phải lực đóng của nó. Trình quản lý báo thức có thể hoạt động ngay cả khi ứng dụng không chạy. – Shrikant

+0

@Shrikant Sự khác nhau giữa "ứng dụng không chạy" và "ứng dụng bị đóng" là gì? – berserk

Trả lời

9

Những gì @Shrikant nói là khá nhiều câu trả lời.

Phiên bản dài hơn là Android được giả định rằng có điều gì đó không ổn với ứng dụng nếu người dùng buộc phải đóng nó theo cách thủ công. Do đó tất cả các hoạt động (BroadcastReceiver, báo động, vv) liên quan đến ứng dụng sẽ không được bắt đầu cho đến khi ứng dụng được chạy thủ công bởi người dùng ít nhất một lần. Ví dụ, BroadcastReceiver khởi động của ứng dụng sẽ không được gọi khi thiết bị được tắt và bật trong trạng thái này cho đến khi người dùng chạy ứng dụng, sau đó sự kiện khởi động thiết bị tiếp theo sẽ được gửi đến BroadcastReceiver của ứng dụng.

Hành vi này được xác nhận là do thiết kế bởi các nhà phát triển khuôn khổ Android: https://groups.google.com/forum/?fromgroups=#!topic/android-developers/anUoem0qrxU

* thay đổi nội dung cho ngữ pháp & thêm một hành vi dụ

+0

Ok điều này thật kỳ quặc đối với tôi. Có lẽ người dùng đã giết một đồng hồ báo thức vì họ muốn giải phóng tài nguyên, nhưng họ vẫn muốn đồng hồ báo thức tắt vào sáng hôm sau? Cái này hoạt động ra sao? – clu

+0

@clu không người dùng nào không giết đồng hồ báo thức, nếu người dùng đã giết ứng dụng bị lỗi hoặc ứng dụng đó bị lỗi do hành vi sai trái của nó, Android sẽ ngừng mọi thứ liên quan đến ứng dụng đó để bảo vệ người dùng khỏi bị ứng dụng đó làm hại. Xóa ứng dụng khỏi báo thức hệ thống là một phần của quy trình đó. – Kai

+1

@kai: Các nhà quản lý báo động có bị giết khi ứng dụng gặp sự cố không? Nếu vậy, chúng ta có nên đặt báo thức trong lớp ứng dụng/hay cách tiếp cận tốt nhất để thực hiện trong các tình huống như vậy? – Basher51