android 使用多线程控制进度条

本文介绍Android应用中如何利用Handler与自定义线程交互更新UI,展示了一个通过按钮触发新线程,并使用Handler向主线程发送消息更新进度条的具体实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值