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

时间:2015-02-11 07:39:42

标签: android alarmmanager android-4.4-kitkat

我的任务是根据设置每24小时及以上拨打服务......

以下代码完美适用5分钟​​,2小时但不能长时间工作,如24小时及以上的Moto E 4.4.4,samsung S4 4.4.2和Nexus5 4.5 ..

以下代码在小米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);
}

我的构建设置: -         机器人:的minSdkVersion =" 9"         机器人: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的应用程序将继续查看之前的行为,其中所有警报都在请求时准确传递。 "

1 个答案:

答案 0 :(得分:1)

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