要使用Thread.start() 方法才能真正创建新的多线程,单纯地使用Handler是实现不了的,Handler和Activity用的是同一个线程
package lujianfei.activity12; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ProgressBar; public class Activity12 extends Activity { private ProgressBar firstBar = null; private Button myButton = null; myThread thread= new myThread(); /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); firstBar = (ProgressBar)findViewById(R.id.Progressbar1); myButton = (Button)findViewById(R.id.button1); Log.d("MainThread","id:"+Thread.currentThread().getId()+" name:"+Thread.currentThread().getName()); //这里运行的是Main线程 myButton.setOnClickListener(new ProgressBarOnClickListener()); } class ProgressBarOnClickListener implements OnClickListener{ public void onClick(View v) { // TODO Auto-generated method stub thread.start(); } } class myThread extends Thread{ public boolean flag=false; @Override public void run() { // TODO Auto-generated method stub int i=0; while(!flag){ Log.d("updateThread","id:"+Thread.currentThread().getId()+" name:"+Thread.currentThread().getName()); //这里运行的是新的线程 i+=10; Message msg = new Message(); msg.arg1=i; updateBarHandler.sendMessage(msg); try{ Thread.sleep(1000); }catch(InterruptedException ex){ ex.printStackTrace(); } } } } Handler updateBarHandler = new Handler(){ @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub Log.d("handleMessage","id:"+Thread.currentThread().getId()+" name:"+Thread.currentThread().getName()); //这里运行的是Main线程 if(msg.arg1>firstBar.getMax()) { thread.flag=true; } else { firstBar.setProgress(msg.arg1); } //updateBarHandler.post(updateThread); super.handleMessage(msg); } }; }