处理表盘中时区的变化
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
字段。
我猜你可以稍微优化一下,只在它发生变化时设置它。但是,就像您在问题中提到的那样,这并不是一项昂贵的操作。我怀疑此更改是否会带来明显的改进。
更重要的是确保您不会 运行 处理时区更改的表盘代码,除非它确实发生了更改。那会触发不必要的(和昂贵的)重绘操作。
如果您查看模拟表盘的 Google's example,您会发现它们正在使用 BroadcastReceiver
处理时区更改。
在documentation中说onTimeTick
会被时区变化触发。每次调用 onTimeTick
时只更新时区数据就足够了吗?
我看到的唯一问题是 mCalendar.setTimeZone(TimeZone.getDefault());
会在每次 onTimeTick
调用时被调用,但这不是繁重的操作,所以我真的没有看到任何问题。
我认为这个例子已经过时了。当我开始构建表盘时,如果您使用 onTimeTick()
方法,则不会调用该方法。从配对设备上的“设置”更改了日期或时区。您必须注册 BroadcastReceiver
才能捕获这些事件。
我不确定这种情况何时停止,但目前 onTimeTick()
似乎会调用与更新时间、日期和时区相关的所有事件。
我们使用 android.text.format.Time
对象并在调用 onTimeTick()
时更新其 timezone
字段。
我猜你可以稍微优化一下,只在它发生变化时设置它。但是,就像您在问题中提到的那样,这并不是一项昂贵的操作。我怀疑此更改是否会带来明显的改进。
更重要的是确保您不会 运行 处理时区更改的表盘代码,除非它确实发生了更改。那会触发不必要的(和昂贵的)重绘操作。