我很难过.我知道这个问题已经被回答了一百次,但我没有尝试过.
我的问题:我制作了一个需要在每分钟精确刷新的Android小部件,就像所有时钟小部件一样.(这个小部件告诉我在我的火车离开前剩下多少分钟,一分钟的错误使它无用).
以下是我的尝试以及各自的结果:
android:updatePeriodMillis="60000"我的appwidget_info.xml.但是,正如API Docs中所述,"请求的更新updatePeriodMillis不会每30分钟发送一次以上",实际上这就是我的小部件更新的频率.我试过用了AlarmManager.在我的WidgetProvider.onEnabled:
AlarmManager am = (AlarmManager)context.getSystemService
(Context.ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
long now = System.currentTimeMillis();
// start at the next minute
calendar.setTimeInMillis(now + 60000 - (now % 60000));
am.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 60000,
createUpdateIntent(context));
Run Code Online (Sandbox Code Playgroud)
然而,正如API文档中所述,"从API 19开始,所有重复警报都是不精确的",实际上我的小部件实际上每五分钟左右更新一次.
targetSdkVersion为18并且没有看到任何差异(每五分钟更新一次).该setRepeating文件似乎使用建议setExact.我尝试了以下内容.在我的更新逻辑结束时:
Calendar calendar = Calendar.getInstance();
long now = System.currentTimeMillis();
long delta = 60000 - (now % 60000);
Log.d(LOG_TAG, "Scheduling …Run Code Online (Sandbox Code Playgroud)