我们如何在Android中使用runOnUiThread?

我是Android新手,我正在尝试使用UI线程,所以我写了一个简单的测试活动。 但我想我误解了一些东西,因为点击按钮 - 应用程序不再响应

public class TestActivity extends Activity {

    Button btn;
    int i = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btn = (Button)findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                runThread();
            }
        });
    }

    private void runThread(){
        runOnUiThread (new Thread(new Runnable() {  
            public void run() {
                while(i++ < 1000){
                    btn.setText("#"+i);
                    try {
                        Thread.sleep(300);
                    } 
                    catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
             }
        }));
    }
}

下面是更正的runThread函数的片段。

private void runThread() {

    new Thread() {
        public void run() {
            while (i++ < 1000) {
                try {
                    runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                            btn.setText("#" + i);
                        }
                    });
                    Thread.sleep(300);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }.start();
}

把它作为一个函数包装起来,然后从你的后台线程中调用这个函数。

public void debugMsg(String msg) {
    final String str = msg;
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            mInfo.setText(str);
        }
    });
}

你有它回到前面。 您的按钮点击会导致对runOnUiThread()的调用,但这不是必需的,因为点击处理程序已经在UI线程上运行。 然后, runOnUiThread()代码启动一个新的后台线程,尝试执行UI操作,然后失败。

相反,直接从您的点击处理程序启动后台线程。 然后,在对btn.setText()的调用中将调用包装到runOnUiThread()

链接地址: http://www.djcxy.com/p/5023.html

上一篇: How do we use runOnUiThread in Android?

下一篇: android.os.NetworkOnMainThreadException sending an email from Android