Amr*_*rut 7 android android-alarms android-notifications android-powermanager android-9.0-pie
我正在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, triggerAtMillis, AlarmIntentBuilder.buildPendingIntent(context, uri));
} else {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, triggerAtMillis, AlarmIntentBuilder.buildPendingIntent(context, uri));
}
Run Code Online (Sandbox Code Playgroud)
我在Android 8.0上测试了相同的逻辑,但工作正常。在Android 9.0中,通知有效,但有时根本不起作用。另外,如果它们能正常工作,它们并不精确,并且会花费大量时间,即使应用程序处于前台,也会发生这种情况。
逻辑是,我有在特定时间设置的重复提醒,这些提醒应该每天在指定时间自行重复。另外,这些都是高优先级提醒,应该在确切的时间降落,因此我正在使用setExact,一旦收到通知,它就会显示出来,并设置同一天下周的新警报。
我已经检查了Android P API文档,但是找不到任何对AlarmManager和Notifications的工作有影响的链接。我唯一引起问题的是Android P中的电源管理和优先级存储桶。但是,即使应用程序位于前台,通知也无法正常工作。
我在这里想念的任何东西。任何帮助深表感谢。
正如您自己提到的,电源管理的新App Standby Buckets功能可能是原因。新文档指出:
如果应用在频繁区间 [或以下] 中,系统会对其运行作业和触发警报的能力施加更强的限制
和
特别是,存储桶决定了应用程序的作业运行的频率,应用程序触发警报的频率
此外,如果您查看电源详细信息,您可以大致了解延迟时间。
值得注意的是,您的存储桶似乎是基于平均使用情况(和机器学习)而不是当前使用情况——这意味着即使您的应用刚刚处于前台,存储桶也会发挥一定的作用
这是因为Android Pie 中引入了电源管理功能。
在 android P 中,对后台运行的应用程序引入了严格的限制。这些限制解释here
正如我们在上面的链接中看到的那样,如果我们将设备连接到充电,则不会对设备施加任何限制并且通知正常工作。但是,如果我们移除设备,那么 Android 系统会对后台运行的应用程序添加某些限制。
我们可以通过从设备设置中关闭应用程序的电池优化来关闭此限制。在设置中搜索电池优化并为我们的应用程序关闭它。
此外,通过更改设备日期和时间来测试通知是一个技巧,直到现在都运行良好,但在 Android P 中,我们必须在实时场景中测试它们或关闭我们的应用程序的电池优化来测试它们。
我希望这会消除我们的疑虑。
| 归档时间: |
|
| 查看次数: |
3574 次 |
| 最近记录: |