Android 2.2:如何使用计时器自动更新文本视图?
我的应用程序中有一些文本视图,我希望每5秒自动更新一次。我有一个刷新它们的方法,但是如何制作一个每5秒运行一次该方法的计时器呢?谢谢 看看扩展a,它有一个onFinish()方法,您可以覆盖它来更新TextView,如果您想让它重复,请重新启动计时器。如果只想更新有限次,也可以绑定到onTick()。提供另一种解决方案Android 2.2:如何使用计时器自动更新文本视图?,android,timer,textview,Android,Timer,Textview,我的应用程序中有一些文本视图,我希望每5秒自动更新一次。我有一个刷新它们的方法,但是如何制作一个每5秒运行一次该方法的计时器呢?谢谢 看看扩展a,它有一个onFinish()方法,您可以覆盖它来更新TextView,如果您想让它重复,请重新启动计时器。如果只想更新有限次,也可以绑定到onTick()。提供另一种解决方案 Handler h=new Handler(); @Override public void onCreate(Bundle savedInstanceState) {
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);
}
});
我自己也尝试过处理程序解决方案,尤其是在阅读了资源页上的这篇文章之后:。但我希望能够像秒表一样启动和停止计时器,在恢复计时器后,处理器解决方案开始不太定期地更新——大约每五秒钟在模拟器上更新一次。最后,我在一个博客上找到了一个建议解决方案的技巧,该解决方案使用了一个扩展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
}
}
私有类UpdateTimeLabel扩展异步任务{
@凌驾
受保护的整数doInBackground(整数…arg0){
while(true){
试一试{
睡眠(1000);
出版进度(arg0);
d(标记“AsyncTask尝试发布”);
}捕捉(中断异常e){
e、 printStackTrace();
}如果(1==0)中断;//我认为这很愚蠢但很必要
}
返回null;
}
受保护的void onProgressUpdate(整数…进度){
updateTimerTextView();//在UI中调用方法
}
}
好吧,但既然我不想让它结束,我想一个普通的计时器会更好。有这样的代码示例吗?如果您不想让它结束,请设置一个非常高的开始值,并让它在onFinish中重新启动!小心。您需要从UI线程中更新这些。确保你的计时器触发的东西将在UI线程中运行,否则Android将强制关闭你。