Android程序开发 Handler对象用法(用Handler控制ProgressBar)

当我们在处理下载或是其他需要长时间执行的任务时,如果直接把处理函数放Activity的OnCreate或是OnStart中,会导致执行过程中整个Activity无响应,如果时间过长,程序还会挂掉。Handler就是把这些功能放到一个单独的线程里执行,与Activity互不影响。今天的例子就结合前几天学的进度条ProgressBar,用Handler更新ProgressBar.
先看最终效果图吧:

当按开始按钮时,进度条会每隔500毫秒加1,直到加到100或者按停止时停止
xml:


package com.pocketdigi;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;

public class main extends Activity {
    /** Called when the activity is first created. */
	ProgressBar pb1;
	Handler handle=new Handler();
	//新建一个Handler对象
	Button b1;
	Button b2;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        pb1=(ProgressBar)findViewById(R.id.pb1);
        pb1.setProgress(0);
        b1=(Button)findViewById(R.id.b1);
        b1.setOnClickListener(b1Lis);
        b2=(Button)findViewById(R.id.b2);
        b2.setOnClickListener(b2Lis);
		
    }
    private OnClickListener b1Lis=new OnClickListener(){

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			handle.post(add);
			//开始执行add
		}
    	
    };
    private OnClickListener b2Lis=new OnClickListener(){

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			handle.removeCallbacks(add);
			//停止执行
			pb1.setProgress(0);
		}
    	
    };
    int pro=0;
    Runnable add=new Runnable(){
    	//定义add
		@Override
		public void run() {
			// TODO Auto-generated method stub
			pro=pb1.getProgress()+1;
			pb1.setProgress(pro);
			setTitle(String.valueOf(pro));
			if(pro<100){
			handle.postDelayed(add,500);
			//如果进度小于100,,则延迟500毫秒后重复执行add
			}
			
		}
    	
    };

}

© 2010, 冰冻鱼. 请尊重作者劳动成果,复制转载保留本站链接! 应用开发笔记