我的任务是根据设置每24小时或更长时间调用服务...
在Moto E 4.4.4、三星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);
}我的构建设置:- 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备注:报警管理器适用于您希望在特定时间运行应用程序代码的情况,即使您的应用程序当前没有运行。对于正常的计时操作(计时、超时等),使用Handler会更容易、更高效。注意:从API 19 (KITKAT)开始,警报传送是不准确的:操作系统将移动警报,以最大限度地减少唤醒和电池使用。有一些新的API可以支持需要严格交付保证的应用程序;请参阅setWindow(int,long,long,PendingIntent)和setExact(int,long,PendingIntent)。targetSdkVersion早于API19的应用程序将继续看到之前的行为,即所有告警都会在请求时准确传递。“
发布于 2016-03-17 15:35:36
也许可以考虑使用GcmNetworkManager,或者更好的方法,使用这个抽象作业调度的库:https://github.com/evernote/android-job
https://stackoverflow.com/questions/28448958
复制相似问题