我试图让我的TextView在一个单独的线程中更新,这样它就不会减慢我的UI速度。它可以工作,但是当我添加一个while循环来控制它时,它会将程序挂起在黑屏中。
代码:
handler.post(new Runnable(){
@Override
public void run() {
while(media[6].isPlaying()) {
TextView myText = (TextView)findViewById(R.id.timerT);
myText.setText(getTimeString(media[1].getCurrentPosition()));
handler.postDelayed(this,10);
}
}
});
我认为runnable创建了一个新线程,这意味着不会发生这种情况?还是我错了?
答案 0 :(得分:1)
使用如下所示的CountDownTimer类:
// Function arguments are in milliseconds.
CountDownTimer timer = new CountDownTimer(6000, 1000) {
public void onTick(long millisUntilFinished) {
//mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
// Do your stuff here.
TextView myText = (TextView)findViewById(R.id.timerT);
myText.setText(getTimeString(media[1].getCurrentPosition()));
}
public void onFinish() {
mTextField.setText("done!");
}
}
timer.start();
答案 1 :(得分:0)
你的黑屏是因为你在事件发送线程上循环时运行任意持续时间:永远不要这样做。对于这种类型的东西,你想使用AsyncTask或在一个单独的线程中启动Runnable,然后使用View.post仅发送定时器更新。