Android Alarm Manager 与 4.4.x 不一致。支持 minSDKVersion 9 和 targetSdkVersion 21 的替代解决方案是什么

标签 android alarmmanager android-4.4-kitkat

我的任务是根据设置每 24 小时及以上时间调用服务...

以下代码在 Moto E 4.4.4、samsung S4 4.4.2 和 Nexus5 4.5 中可以完美运行 5 分钟、2 小时,但不能长时间运行,如 24 小时及以上。

以下代码在小米 Mi3 4.4.2 中甚至无法运行 5 分钟,而且警报转储中也没有警报..

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
    am2.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP,
        SystemClock.elapsedRealtime() + 86400000, pi);
} else {
    am2.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
        SystemClock.elapsedRealtime() + 86400000, pi);
}

我的build设置:- android:minSdkVersion="9" android:targetSdkVersion="21" 使用 4.4.2 sdk 构建 apk...

在查看 API 引用资料后,我了解到 Android 4.4x 及更高版本的警报不一致... 如何使精确警报从 minSdkVersion 9 兼容到 19 及更高版本。 我花了更多的时间来分析和调试,因为我必须等待 24 小时甚至更长时间才能检查警报服务调用。 提供提示或解决方案将非常有帮助和赞赏

" https://developer.android.com/about/versions/android-4.4.html http://developer.android.com/reference/android/app/AlarmManager.html 注意:Alarm Manager 适用于您希望在特定时间运行应用程序代码的情况,即使您的应用程序当前未运行。对于正常的计时操作(滴答、超时等),使用 Handler 更容易、更有效。 注意:从 API 19 (KITKAT) 开始,警报传送不准确:操作系统将转移警报以尽量减少唤醒和电池使用。有新的 API 来支持需要严格交付保证的应用程序;参见 setWindow(int, long, long, PendingIntent) 和 setExact(int, long, PendingIntent)。 targetSdkVersion 早于 API 19 的应用程序将继续看到以前的行为,即所有警报都在请求时准确传递。 "

最佳答案

也许考虑使用 GcmNetworkManager或者,更好的是,这个抽象作业调度的库:https://github.com/evernote/android-job

关于Android Alarm Manager 与 4.4.x 不一致。支持 minSDKVersion 9 和 targetSdkVersion 21 的替代解决方案是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28448958/

相关文章:

android - 我的应用程序在 startActivity() 上崩溃

Android:要在 ListView 打开时将项目设置为选中?

android - 作业调度程序与后台服务

android - ContentObserver 在一段时间后停止工作

java - Android.widget.RelativeLayout 无法转换为 android.widget.ImageView

android - 触摸更改 TextView 背景颜色

java - 使用Alarmmanager在每天的特定时间启动和停止服务

android - 为什么我的下面的实现有时会发出不应该响起警报的警报?

android - 带有 KitKat 的 Android 设备上的 java.lang.NoClassDefFoundError

logging - Android Lollipop 内核中的记录器驱动程序