Too many alarms (500) registered

公司項目開發時,同事見解總結。BUG基本都是在三星機器上出現。

1.PendingIntent.getBroadcast的第4個參數flags,建議用PendingIntent.FLAG_UPDATE_CURRENT,因爲FLAG_CANCEL_CURRENT只是給Intent打上cancel標記,並沒有立即取消,而FLAG_UPDATE_CURRENT只是更新那個Intent的狀態,不會產生新的Intent。(可通過 adb shell dumpsys alarm 查看應用alarm相關信息)

2.PendingIntent.getBroadcast的第2個參數requestCode可以用來區分不同的鬧鐘。requestCode應當是一個常量,不然會產生多個鬧鐘。

3.不要使用AlarmManager.setRepeating方法。setRepeating註冊的鬧鐘會常駐在Android系統進程裏,那怕應用進程被殺掉,鬧鐘也不會被取消。如果需要重複性的鬧鐘,可以在接到鬧鐘廣播後,再重新啓動一個鬧鐘,自己模擬setRepeating。

示例代碼:

Intent intent = new Intent("com.example.action.alarm");
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, requestCode, intent,PendingIntent.FLAG_UPDATE_CURRENT);          
mAlarmManager.set(AlarmManager.RTC_WAKEUP, sTime, pendingIntent);

修改後覆蓋安裝,可能還有這個問題。因爲覆蓋安裝,舊版本註冊的鬧鐘還在,只有重啓手機纔會清空。

發佈了27 篇原創文章 · 獲贊 41 · 訪問量 35萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章