自定义的线程中是不能更新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(); } }
用Handler的post()方法来传递线程中的代码段到主线程中执行,布布扣,bubuko.com
时间: 2024-10-10 04:05:56