0%

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
            }
            
        }
        
    };

}