Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 处理程序/Runnable不使用循环_Android_Multithreading_While Loop_Handler - Fatal编程技术网

Android 处理程序/Runnable不使用循环

Android 处理程序/Runnable不使用循环,android,multithreading,while-loop,handler,Android,Multithreading,While Loop,Handler,我试图让我的TextView在一个单独的线程中更新,这样它就不会减慢我的UI。它可以工作,但当我添加一个while循环来控制它时,它会将程序挂起在黑屏上 代码: 我认为runnable会创建一个新线程,这意味着不会发生这种情况?还是我出了大错?您的黑屏是因为您在事件调度线程上运行任意持续时间的while循环:永远不要这样做。对于此类内容,您希望使用AsyncTask或在单独的线程中启动Runnable,然后使用View.post仅发送计时器更新。使用如下类: // Function argume

我试图让我的TextView在一个单独的线程中更新,这样它就不会减慢我的UI。它可以工作,但当我添加一个while循环来控制它时,它会将程序挂起在黑屏上

代码:


我认为runnable会创建一个新线程,这意味着不会发生这种情况?还是我出了大错?

您的黑屏是因为您在事件调度线程上运行任意持续时间的while循环:永远不要这样做。对于此类内容,您希望使用AsyncTask或在单独的线程中启动Runnable,然后使用View.post仅发送计时器更新。

使用如下类:

// 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();

当您使用
处理程序发布
Runnable
时,它将在主线程上执行<代码>可运行
只是一个接口。。。它不包含除实现时编写的代码以外的任何隐藏代码。
// 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();