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);

修改后覆盖安装,可能还有这个问题。因为覆盖安装,旧版本注册的闹钟还在,只有重启手机才会清空。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值