我的Android应用有TextView
告诉用户数据时间(“13分钟前”)。我目前使用Runnable
每秒更新一次,以便在分钟随notifyDataSetChanged()
更改为我的适配器时捕获。但这会导致每秒垃圾收集......
还有另一种方法可以在系统时钟发生变化时触发TextView
更新(或采取一般措施),而不会每秒检查一次此类更改吗?
答案 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)
答案 3 :(得分:0)
除了Sam的好回答之外,还有更漂亮的解决方案。
利用http://developer.android.com/reference/android/text/format/DateUtils.html查找时间跨度并注册android.intent.action.TIME_TICK
,您将在列表视图中更新时间。