系统时钟变化时采取行动?

时间:2013-01-29 18:41:37

标签: android runnable

我的Android应用有TextView告诉用户数据时间(“13分钟前”)。我目前使用Runnable每秒更新一次,以便在分钟随notifyDataSetChanged()更改为我的适配器时捕获。但这会导致每秒垃圾收集......

还有另一种方法可以在系统时钟发生变化时触发TextView更新(或采取一般措施),而不会每秒检查一次此类更改吗?

4 个答案:

答案 0 :(得分:4)

由于您已经设置了Runnable和回调,因此请使用modulo来计算下次更新的时间:

handler.postDelayed(runnable, 
        DateUtils.MINUTE_IN_MILLIS - System.currentTimeMillis % DateUtils.MINUTE_IN_MILLIS);

无论是59秒,30秒还是1秒钟,这将在下一分钟发生回调。作为一个注释,如果Runnable只更新一个TextView,那么当事件是一个小时时忘记切换到DateUtils.HOUR_IN_MILLIS,没有意义每分钟更新“1小时前”。

您可能会发现像DateUtils.getRelativeTimeSpanString()这样的方法对于创建“x minutes ago”字符串非常有用。

答案 1 :(得分:3)

虽然Sam的回答非常好,但我只是添加了这个,因为它完全适合这个问题。当时钟发生变化时,系统每分钟都会发送一次广播。它是Intent.ACTION_TIME_TICK,您只能使用在代码中手动注册的BroadCastReceiver来接收它,而不是通过清单。请参阅文档here

答案 2 :(得分:0)

使用固定周期的Timer对象。

这些方法采用TimerTask对象。

请参阅Google的Timer documentation

请在停止活动时取消计时器

答案 3 :(得分:0)

除了Sam的好回答之外,还有更漂亮的解决方案。

利用http://developer.android.com/reference/android/text/format/DateUtils.html查找时间跨度并注册android.intent.action.TIME_TICK,您将在列表视图中更新时间。

相关问题