我的应用中有一些TextView,我想每5秒自动更新一次。我有一个刷新它们的方法,但是如何制作一个每5秒运行一次方法的计时器?谢谢!
答案 0 :(得分:4)
看看扩展CountDownTimer,它有一个onFinish()方法,你可以覆盖它来更新你的TextView,如果你想重复它,就重启计时器。如果您只想更新有限次数,也可以绑定到onTick()。
答案 1 :(得分:4)
提供另一种解决方案
Handler h=new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.main);
h.post(new Runnable(){
@Override
public void run() {
// call your function
h.postDelayed(this,5000);
}
});
答案 2 :(得分:-1)
我自己尝试了Handler解决方案,尤其是在资源页面上阅读本文之后:http://developer.android.com/resources/articles/timed-ui-updates.html。但是我希望能够像秒表一样启动和停止计时器,并且在恢复计时器之后,处理程序解决方案开始更新更少 - 在模拟器上大约每五秒钟一次。最后,我在博客上发现了一个提示,其中一个内部类扩展了AsyncTask。您可以使用AsyncTask中的publishProgress() - onProgressUpdate()功能。从onProgressUpdate()开始,您可以在UI线程中“直接”进行更改,例如myTextView.setText(...)。这会更频繁地发布结果。这是内部类的超级简单实现:
private class UpdateTimerLabel extends AsyncTask<Integer, Integer, Integer> {
@Override
protected Integer doInBackground(Integer... arg0) {
while (true) {
try {
Thread.sleep(1000);
publishProgress(arg0);
Log.d(tag, "AsyncTask tries to publish");
} catch (InterruptedException e) {
e.printStackTrace();
}if (1 == 0) break; // Silly but necessary I think
}
return null;
}
protected void onProgressUpdate(Integer... progress) {
updateTimerTextView(); // Call to method in UI
}
}