我是android的新手,并且一直在阅读有关工作线程的一些内容而不是阻止UI线程。我正在玩一个简单的计时器应用程序,它启动一个线程,在创建活动时每秒更新一次textview。所以我的问题是,这些天最好的方法是什么。以下两个例子都有效,但有更好的(更有效/更多的Android)方式吗?
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
seconds++;
runOnUiThread(new Runnable() {
@Override
public void run() {
secondsTextView.setText(seconds);
}
});
handler.postDelayed(this, 1000);
}
}, 1000);
或
new Thread(){
@Override
public void run(){
try{
while(!isInterrupted()){
Thread.sleep(1000);
runOnUiThread(new Runnable() {
@Override
public void run() {
seconds++;
secondsTextView.setText(seconds);
}
});
}
}catch(Exception e){
Log.e("Activity1", e.toString());
}
}
}.start();
答案 0 :(得分:3)
更有效的方法是:
timeOnTextView.postDelayed(new Runnable() {
@Override
public void run() {
seconds++;
timeOnTextView.postDelayed(this, 1000);
}
}, 1000);
在主应用程序线程上调用传递给run()
的{{1}}的{{1}},因此您无需使用Runnable
。
自postDelayed()
实施runOnUiThread()
以来,您不需要postDelayed()
。