最好的方法是每分钟更新一次TextView

我的问题是类似于这个, 如何每分钟更新一个小部件 ,但是我只想更新UI的TextView。 我需要访问时间,所以不幸的是不能简单地使用DigitalClock视图。

我一直在研究,并find方法来更新每一分钟,但不是在一分钟,所以他们与系统时钟同步(所以他们可能高达59秒不同步!)

我能想到的唯一方法是(a)每秒钟运行一个处理程序(或定时器)(如果我只想每分钟更新一次,看起来有点像矫枉过正) 从android.com资源

(b)在后台运行服务。 (我不喜欢这个,因为我已经有更重要的东西在后台运行)

(三)使用报警pipe理器(又似乎是矫枉过正)

似乎是一件容易的事情,然而…

任何build议感谢梅尔

Related of "最好的方法是每分钟更新一次TextView"

你可以尝试configuration一个定时器来运行一个TimerTask ,它每分钟更新一次TextView(见其调度方法)。

接受的答案没有具体回答这个问题。 OP要求有一种方式来按时接收某种事件(系统时钟分00秒)。

使用定时器不是正确的方法来做到这一点。 这不仅是矫枉过正,但你必须采取一些手段,使其正确。

这样做的正确方法(即更新显示时间为HH:mm的TextView)是使用BroadcastReceiver,如下所示:

BroadcastReceiver _broadcastReceiver; private final SimpleDateFormat _sdfWatchTime = new SimpleDateFormat("HH:mm"); private TextView _tvTime; @Override public void onStart() { super.onStart(); _broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context ctx, Intent intent) { if (intent.getAction().compareTo(Intent.ACTION_TIME_TICK) == 0) _tvTime.setText(_sdfWatchTime.format(new Date())); } }; registerReceiver(_broadcastReceiver, new IntentFilter(Intent.ACTION_TIME_TICK)); } @Override public void onStop() { super.onStop(); if (_broadcastReceiver != null) unregisterReceiver(_broadcastReceiver); } 

系统将根据系统时钟在每分钟的确切开始处发送此广播事件。 不要忘了,事先初始化您的TextView(到当前的系统时间),因为它可能会在一分钟之内popup您的用户界面,TextView将不会更新,直到下一分钟发生。

你有没有试过postDelayed()

这是我用过的:

 int secsUntilOnTheMinute=60-Calendar.getInstance().get(Calendar.SECOND); timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { updateSendTimesHandler.sendEmptyMessage(0); } }, secsUntilOnTheMinute*1000, 60000);