Android P Beta – AlarmManager通知不起作用

我在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中的电源管理和优先级桶.但是,即使应用程序位于前台,通知也无法正常工作.

在这里缺少的任何东西.任何帮助深表感谢.

最佳答案
正如您自己所提到的,电源管理的新App Standby Buckets功能可能是原因.新文件指出:

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,您可以大致了解延迟时间.

enter image description here

值得注意的是,看起来你的存储桶是基于平均使用量(和机器学习)而不是当前使用情况 – 这意味着即使你的应用程序刚刚出现在前台,这些存储桶也会扮演一些角色

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...