我正在使用alarmManager制作数字时钟小部件,每隔1分钟更新一次。这是创建alarmManager的代码。 (这取自This StackOverFlow post)。
@Override
public void onEnabled(Context context) {
super.onEnabled(context);
Log.d("onEnabled","Widget Provider enabled. Starting timer to update widget every minute");
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), 60000, createClockTickIntent(context));
}
private PendingIntent createClockTickIntent(Context context) {
Intent intent = new Intent(CLOCK_WIDGET_UPDATE);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
return pendingIntent;
}
代码工作正常,我的小部件按预期每分钟更新。问题是,假设用户在3:17:40秒添加小部件,我的小部件将时间显示为3:17。告知Alarmmanager在60秒后,即3:18:40更新小部件。所以从3:18:00到3:18:39,我的小部件显示3:17,而不是3:18
因此总有一个偏移延迟几秒(添加小部件的时间减去系统时钟中实际分钟改变的时间)。我怎样才能消除这种滞后?当通知栏中的时间发生变化但我的小部件没有变化时,它看起来非常糟糕。
每秒调用alarmManager都可以解决这个问题,但这是非常糟糕的方法。当系统时钟改变一分钟时,有什么办法可以设置“SetRepeating”吗?
答案 0 :(得分:0)
如何消除此滞后?
在您的代码中,您告诉AlarmManager
每隔60秒从现在给您控制权。如果您想让AlarmManager
每隔60秒从下一分钟的开始进行控制,则需要使用System.currentTimeMillis()
以外的其他内容,例如使用java.util.Calendar
确定下一分钟的开始时间。