【发布时间】:2015-02-11 07:39:42
【问题描述】:
我的任务是根据设置每 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);
}
我的构建设置:- 安卓: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 注意:警报管理器适用于您希望应用程序代码在特定时间运行的情况,即使您的应用程序当前没有运行。对于正常的计时操作(滴答声、超时等),使用 Handler 更容易、更高效。 注意:从 API 19 (KITKAT) 开始,警报传递是不精确的:操作系统将切换警报以最大程度地减少唤醒和电池使用。有新的 API 来支持需要严格交付保证的应用程序;参见 setWindow(int, long, long, PendingIntent) 和 setExact(int, long, PendingIntent)。 targetSdkVersion 早于 API 19 的应用程序将继续看到以前的行为,即所有警报都在请求时准确传递。 "
【问题讨论】:
标签: android alarmmanager android-4.4-kitkat