我的任务是根据设置每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的应用程序将继续查看之前的行为,其中所有警报都在请求时准确传递。 "
答案 0 :(得分:1)
或许考虑使用GcmNetworkManager,或者甚至更好地使用这个抽象作业调度的库:https://github.com/evernote/android-job