我在Android P beta版本4上测试我的应用程序.我的应用程序的targetSdkVersion是27
据观察,警报管理器通知未按预期工作.我正在使用下面的代码来设置通知 –
if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
alarmManager.set(AlarmManager.RTC_WAKEUP,triggerAtMillis,AlarmIntentBuilder.buildPendingIntent(context,uri));
} else if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP,uri));
} else {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,uri));
}
我在Android 8.0上测试了相同的逻辑,但它运行正常.在Android 9.0中,通知正在运行,但有时它们根本不起作用.此外,如果它们工作,它们不准确并且花费太多时间,即使应用程序在前台也会发生这种情况.
逻辑是,我是在特定时间设置的重复提醒,并且应该在指定时间每天重复它们.这些都是高优先级的提醒,应该在准确的时间登陆,所以我使用setExact,一旦收到通知,它就会被显示,同一天下一周的新警报被设置.
我检查了Android P API文档,但找不到任何对AlarmManager和Notifications的工作有影响的链接.只有我认为导致问题的是Android P中的电源管理和优先级桶.但是,即使应用程序位于前台,通知也无法正常工作.
我在这里缺少的任何东西.任何帮助深表感谢.
If an app is in the frequent bucket [or below],the system imposes stronger restrictions on its ability to run jobs and trigger alarms
和
In particular,the bucket determines how frequently the app’s jobs run,how often the app can trigger alarms
此外,如果您查看Power Details,您可以大致了解延迟时间.
值得注意的是,看起来你的存储桶是基于平均使用量(和机器学习)而不是当前使用情况 – 这意味着即使你的应用程序刚刚出现在前台,这些存储桶也会扮演一些角色