首页 > 代码库 > 用Handler的post()方法来传递线程中的代码段到主线程中执行

用Handler的post()方法来传递线程中的代码段到主线程中执行

自定义的线程中是不能更新UI的,但是如果遇到更新UI的事情,我们可以用handler的post()方法来将更新UI的方法体,直接传送到主线程中,这样就能直接更新UI了。Handler的post()方法就是将Runnable中的代码段传送到主线程。

布局文件就是个textView,我就不贴了。

全部代码

package com.kale.handler;import android.app.Activity;import android.graphics.Color;import android.os.Bundle;import android.os.Handler;import android.widget.TextView;/** * @author:Jack Tony * @tips  :将自己线程中的代码段传递到主线程中执行,用post方法就可以把runnable中的代码进行传递了。 * @date  :2014-7-31 */public class MainActivity extends Activity {    TextView valueTv;    public Handler mHandler;    private MyThread thread;    // 定义一个自己的线程    class MyThread extends Thread {        @Override        public void run() {            System.out.println("线程开始运行");            Runnable r = new Runnable() {                @Override                public void run() {                    valueTv.setTextColor(Color.RED);                    valueTv.setTextSize(30);                    valueTv.setText("从线程中传过来的代码段");                    System.out.println("执行runnable代码的线程:"+Thread.currentThread().getName());                }            };            //上面代码中的runnable线程体经过post后会直接传送到主线程中执行修改字体的操作。            //post直接可以把一段代码当做变量一样传递,但是请不要传送耗时操作的代码到主线程中            mHandler.post(r);        }    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        valueTv = (TextView)findViewById(R.id.vale_textView);        mHandler = new Handler();        thread = new MyThread();        // 启动线程        thread.start();    }    }