2012-12-25 17 views
6

Ứng dụng của tôi đặt báo thức lặp lại về tương tác của người dùng, có thể thay đổi khoảng thời gian được đặt cho chương trình phát bằng Trình quản lý báo thức.
Không có nhiều tính năng bổ sung.
Cập nhật hoặc hủy cờ có tốt hơn trong trường hợp này không?FLAG_CANCEL_CURRENT hoặc FLAG_UPDATE_CURRENT

Cảm ơn

+0

'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? –

+0

no i am not using extras .. – Dory

+0

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

Trả lời

11

Nếu bạn không sử dụng tính năng bổ sung, bạn không phải chỉ định bất kỳ cờ nào. Chúng chỉ thay đổi cách các hệ thống xử lý các tính năng bổ sung với một số PendingIntent: thay thế các hệ thống trong khớp hiện tại (được lưu trong hệ thống PendingIntent) hoặc hủy bỏ nó và tạo một cái mới. Tham khảo tài liệu để biết chi tiết: http://developer.android.com/reference/android/app/PendingIntent.html#FLAG_CANCEL_CURRENT

+0

Được rồi, tôi hiểu rồi ... Cảm ơn bạn ..! – Dory

+0

Vì anh ta không cần CANCEL nên 'FLAG_UPDATE_CURRENT' là con đường để đi - nếu không thì không cần thiết phải tạo ra một đối tượng mới. –

+0

Hơn nữa, việc sử dụng CANCEL có thể dẫn đến 'PendingIntent.CanceledException' –

6

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ả.