代码: 
    //声明一个Handler对象
    private Handler handler = new Handler(){ @Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
progressBar.setProgress(msg.arg1);
handler.post(updateThread);//立即执行updateThread线程进入run()方法
}
    
    };
    //匿名内部类方式定义一个线程
    private Runnable updateThread = new Runnable(){
     int i = 0;
@Override
public void run() {
System.out.println("UpdateThread");
i+=10;
//progressBar.setProgress(i);//设置当前进度条位置
//progressBar.setSecondaryProgress(i+10);//设置当前第二进度条位置
//得到消息对象,Message类由Android操作系统提供
Message msg = handler.obtainMessage();
msg.arg1 = i;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//将消息压入消息队列,handlerMessage(Message msg)方法被异步调用
handler.sendMessage(msg);
if(i==100){
i=80;//这里重新给i赋值后(i<90)线程就不会终止,为什么? //progressBar.setVisibility(View.GONE);//隐藏进度条
handler.removeCallbacks(updateThread);//从队列中移除updateThread线程
}
//延迟1秒将updateThread线程加入线程队列去执行一次updateThread线程
//handler.postDelayed(updateThread, 1000);
}
    
    };

解决方案 »

  1.   

    是看的mar代码吧,那上面的初学可以,但是要学精了,你就会发现很多问题了.这个我当时也注意到了,是不会停的,关键是那个handler messag有个Thread.post的函数重调了这个线程
      

  2.   

    @Override
     public void handleMessage(Message msg) {
     super.handleMessage(msg);
     progressBar.setProgress(msg.arg1);
     handler.post(updateThread);//立即执行updateThread线程进入run()方法
    }
     这个方法要改下你自己注释都说了,是立即执行线程的run方法,所以,不管你run里面怎么判断,它都会调你的run方法,所以改成
    @Override
     public void handleMessage(Message msg) {
     super.handleMessage(msg);
     progressBar.setProgress(msg.arg1);
     if(msg.arg1 >= progressBar.getMax()) {
        handler.removeCallbacks(updateThread);
     } else {
        handler.post(updateThread);//立即执行updateThread线程进入run()方法
     }
    }