android - AlarmManager 重复报警并不总是调用 BroadcastReceiver
问题描述
我有一些奇怪的问题AlarmManager
和重复警报。
我将重复警报设置为每分钟运行一次:
val i = Intent(applicationContext, CheckStatusReceiver::class.java)
val alarmIntent = PendingIntent.getBroadcast(context.applicationContext, 1001, i, PendingIntent.FLAG_UPDATE_CURRENT)
val alarmManager = applicationContext.getSystemService(Context.ALARM_SERVICE) as AlarmManager
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 60 * 1000, 60 * 1000, alarmIntent)
问题是当设备关闭屏幕并且未连接到计算机(adb)时,BroadcastReceiver
并不总是调用 my 。有时每分钟都会调用一次,但有时有几分钟没有任何调用!我在少数设备上对其进行了测试,它几乎每次都发生在 4.2、4.4 上,有时在 6.0.1 上发生,在 5.1 和 7.1 上发生了几次。电池是满的还是空的都没关系。
我收到的注册地址为AndroidManifest.xml
:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="test.example.package">
[... permissions ...]
<application
[....]
<receiver android:name=".receiver.CheckStatusReceiver" />
</application>
</manifest>
我的接收器只是为了测试目的而记录:
class CheckStatusReceiver: BroadcastReceiver(), AnkoLogger {
override fun onReceive(context: Context, intent: Intent?) {
info("CheckStatusReceiver onReceive called")
}
}
当屏幕打开或设备连接到带有屏幕关闭警报的 adb 时,通常 (99%)就像一个魅力。
我应该怎么做才能确保警报总是被调用?
解决方案
推荐阅读
- php - 未定义索引:jawaban
- c++ - C++ - 通用结构的成员在分配双精度时给出错误的值(但适用于整数)
- python - 使用 cloud9 将 aws lambda 部署到另一个区域的最佳实践
- python - 日期不一致
- git - Jenkins:无法连接到 Git 存储库
- hive - Nifi 中的 PutHiveStreaming 处理器抛出 NPE
- python - Google IAP 不断响应 401 Unauthorized
- c++ - 带括号的“嵌套”类模板参数推导:GCC 与 clang
- javascript - Html to JS Datatable:排序或页面大小更改后仍显示删除的行?
- assembly - x86 汇编助记符是否标准化?