处理表盘中时区的变化

Handling change of a timezone in a watch face

如果您查看模拟表盘的 Google's example,您会发现它们正在使用 BroadcastReceiver 处理时区更改。

documentation中说onTimeTick会被时区变化触发。每次调用 onTimeTick 时只更新时区数据就足够了吗?

我看到的唯一问题是 mCalendar.setTimeZone(TimeZone.getDefault()); 会在每次 onTimeTick 调用时被调用,但这不是繁重的操作,所以我真的没有看到任何问题。

我认为这个例子已经过时了。当我开始构建表盘时,如果您使用 onTimeTick() 方法,则不会调用该方法。从配对设备上的“设置”更改了日期或时区。您必须注册 BroadcastReceiver 才能捕获这些事件。

我不确定这种情况何时停止,但目前 onTimeTick() 似乎会调用与更新时间、日期和时区相关的所有事件。

我们使用 android.text.format.Time 对象并在调用 onTimeTick() 时更新其 timezone 字段。

我猜你可以稍微优化一下,只在它发生变化时设置它。但是,就像您在问题中提到的那样,这并不是一项昂贵的操作。我怀疑此更改是否会带来明显的改进。

更重要的是确保您不会 运行 处理时区更改的表盘代码,除非它确实发生了更改。那会触发不必要的(和昂贵的)重绘操作。