处理程序/ Runnable不使用循环

时间:2011-08-14 02:27:04

标签: android multithreading while-loop handler

我试图让我的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创建了一个新线程,这意味着不会发生这种情况?还是我错了?

2 个答案:

答案 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仅发送定时器更新。