Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用AlarmManager导致appWidget时钟偏移延迟_Android - Fatal编程技术网

Android 使用AlarmManager导致appWidget时钟偏移延迟

Android 使用AlarmManager导致appWidget时钟偏移延迟,android,Android,我正在使用alarmManager制作一个数字时钟小部件,它每1分钟更新一次。下面是创建alarmManager的代码。这是从一个地方拿走的 代码运行得非常好,我的小部件按预期每分钟都在更新。问题是,假设用户在3:17:40秒添加小部件,我的小部件显示时间为3:17。Alarmmanager被告知在60秒后,即3:18:40更新小部件。所以从3:18:00到3:18:39,我的小部件显示3:17,而不是3:18 所以总有几秒钟的偏移滞后,即添加小部件的时间减去系统时钟中实际分钟变化的时间。如何消

我正在使用alarmManager制作一个数字时钟小部件,它每1分钟更新一次。下面是创建alarmManager的代码。这是从一个地方拿走的

代码运行得非常好,我的小部件按预期每分钟都在更新。问题是,假设用户在3:17:40秒添加小部件,我的小部件显示时间为3:17。Alarmmanager被告知在60秒后,即3:18:40更新小部件。所以从3:18:00到3:18:39,我的小部件显示3:17,而不是3:18

所以总有几秒钟的偏移滞后,即添加小部件的时间减去系统时钟中实际分钟变化的时间。如何消除这种滞后?当通知栏中的时间发生变化但我的小部件没有变化时,它看起来真的很糟糕

每秒调用alarmManager将解决此问题,但这是一种非常糟糕的方法。当系统时钟每分钟改变一次时,是否有任何方法可以设置SETREPECTING

如何消除这种滞后

在代码中,您告诉AlarmManager从现在起每60秒为您提供一次控制。如果希望AlarmManager从下一分钟开始每隔60秒为您提供一次控制,则需要使用System.currentTimeMillis以外的其他工具,例如使用java.util.Calendar来确定下一分钟的开始时间

@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;
}