要使用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);
}
};
}