我的 Android 应用程序TextView
告诉用户数据年龄(“13 分钟前”)。我目前使用 a 每秒更新一次Runnable
,以捕获当分钟更改notifyDataSetChanged()
为我的适配器时。但这会导致每秒垃圾收集......
TextView
当系统时钟改变分钟而不检查每秒是否有这种变化时,是否有另一种方法来触发更新(或采取一般行动)?
由于您已经设置了 Runnable 和回调,因此使用模来计算下一次更新应该发生的时间:
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 分钟前”字符串的方法。
虽然山姆的回答非常好,但我只是添加了这个,因为它非常适合这个问题。时钟变化时,实际上每分钟系统都会发送一次广播。它是Intent.ACTION_TIME_TICK
并且您只能使用BroadCastReceiver
在您的代码中手动注册的 a 来接收它,而不是通过清单。请参阅此处的文档。
除了山姆的好答案之外,还有更漂亮的解决方案。
利用http://developer.android.com/reference/android/text/format/DateUtils.html查找时间跨度并注册android.intent.action.TIME_TICK
您将在列表视图中更新时间的位置。
这是另一个相同的问题和答案