Không bao giờ sử dụng FLAG_CANCEL_CURRENT với PendingIntents mà bạn sử dụng khi đặt báo thức. Nếu bạn muốn lên lịch lại báo thức cho một thời điểm khác, bạn không cần bất kỳ cờ nào cả; chỉ cần tạo một PendingIntent trùng lặp với các lá cờ bằng 0 và sau đó sử dụng nó để đặt() một báo động: điều này sẽ ngầm hủy bỏ báo thức hiện tại và sau đó đặt nó cho thời gian mới được chỉ định. Nếu bạn đã sử dụng FLAG_CANCEL_CURRENT khi bạn tạo PendingIntent mới, nó sẽ phá vỡ khả năng của Trình quản lý báo động để nhận ra rằng nó "giống" với PendingIntent đã hủy, và bạn kết thúc với cái cũ treo xung quanh, không gửi được, chiếm bộ nhớ và CPU. Tôi đã nhìn thấy các ứng dụng với lỗi này rack lên nghĩa đen hàng trăm báo động cũ trong hệ thống, đủ để có một hiệu suất đáng chú ý và sử dụng bộ nhớ hit.
Nếu bạn chỉ muốn thay đổi các tính năng bổ sung mà không thực sự lên lịch lại báo thức hiện tại, đó là những gì FLAG_UPDATE_CURRENT là dành cho. Nếu bạn muốn lên lịch lại, không sử dụng bất kỳ cờ nào cả.
'Không có gì nhiều trong cách tính năng bổ sung' nghĩa là gì? Bạn đang sử dụng tính năng bổ sung hay không? –
no i am not using extras .. – Dory
Hãy là đồ mà Samsung Lollipop có vấn đề khi một người đang sử dụng FLAG_CANCEL_CURRENT. Đề cập đến http://stackoverflow.com/questions/29344971/java-lang-securityexception-too-many-alarms-500-registered-from-pid-10790-u – Elye