android - Android 报警管理器工作不一致
问题描述
我想用 BroadcastReceiver 和 AlarmManager 运行一些后台操作。但有时onReceive函数调用晚了10秒。
这是 onReceive 的日志:
2021-07-01 11:32:53.909: onReceive
**2021-07-01 11:33:13.796: onReceive**
2021-07-01 11:33:23.870: onReceive
2021-07-01 11:33:33.906: onReceive
2021-07-01 11:33:43.940: onReceive
2021-07-01 11:33:53.975: onReceive
**2021-07-01 11:34:13.811: onReceive**
2021-07-01 11:34:23.854: onReceive
2021-07-01 11:34:33.920: onReceive
2021-07-01 11:34:43.951: onReceive
2021-07-01 11:34:53.988: onReceive
**2021-07-01 11:35:13.837: onReceive**
2021-07-01 11:35:23.878: onReceive
2021-07-01 11:35:33.915: onReceive
2021-07-01 11:35:43.988: onReceive
2021-07-01 11:35:54.022: onReceive
2021-07-01 11:36:13.860: onReceive
2021-07-01 11:36:23.890: onReceive
2021-07-01 11:36:33.924: onReceive
2021-07-01 11:36:43.954: onReceive
2021-07-01 11:36:54.013: onReceive
**2021-07-01 11:37:13.931: onReceive**
2021-07-01 11:37:23.963: onReceive
2021-07-01 11:37:33.998: onReceive
2021-07-01 11:37:44.035: onReceive
2021-07-01 11:37:54.077: onReceive
**2021-07-01 11:38:13.955: onReceive**
2021-07-01 11:38:23.985: onReceive
2021-07-01 11:38:34.021: onReceive
2021-07-01 11:38:44.060: onReceive
2021-07-01 11:38:54.102: onReceive
默认等待值是 10000 毫秒,但可以更改,这就是我setAlarmManager()
每次调用的原因。
这是我的代码:
public void setAlarmManager() {
Intent intent = new Intent(context, TestReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 1, intent , 0);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
long elapsedRealTime = SystemClock.elapsedRealtime() + 10000;
alarmManager.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, elapsedRealTime, pendingIntent);
}
public void onReceive(final Context context, Intent intent)
{
try
{
//do some work
}
catch(Exception ex)
{
...
}
finally
{
setAlarmManager();
}
}
解决方案
推荐阅读
- ios - 我们能否知道 openUrl 是否来自我们创建的小部件?
- rust - Near合约中如何实现多维哈希
- swift - 如何使用 GRDB 将列作为 Double 求和
- java - 问题 sshpass 在 java 上使用 Runtime.getRuntime().exec,但在 cmd 调优上
- r - 如何删除遵循某种模式的字符串的一部分,但不包括使用 R 的另一个模式?
- python - 从 environment.yml 文件创建环境 tqdm 访问被拒绝
- python - 如何在tensorflow中自动选择空闲GPU进行模型训练?
- php - 如何将 Wordpress 中的帖子内容直接插入文件管理器?
- python - 在子图中绘制熊猫数据框
- java - 如何使用谷歌翻译获取多个单词的翻译