现在的位置: 首页 > 综合 > 正文

android 使用多线程控制进度条

2013年05月30日 ⁄ 综合 ⁄ 共 1810字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.