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