利用handler机制 每隔1s发送一次消息 不适用线程 仅利用handler和message
利用handler+message 模拟一个4分钟的加载进度条
public class Test {
private static final int MESSAGE = 100;
private int timerCount = 0;
public Test() {
handler.sendEmptyMessageDelayed(MESSAGE, 1000);
}
private final Handler.Callback callback = new Handler.Callback() {
@Override
public boolean handleMessage(@NonNull Message msg) {
if (msg.what == MESSAGE) {
if (timerCount >= 4 * 60)
return false;
timerCount++;
handler.sendEmptyMessageDelayed(MESSAGE, 1000);
}
return false;
}
};
private final Handler handler = new Handler(Looper.getMainLooper(), callback);
}
模拟假进度条吗?那推荐使用Timer算了
ProgressBar progressBar = findViewById(R.id.progress);
double single = (float)100/240;//因为需求是1秒一下,所以进度条Max 100/240 得到单次涨多少
final int[] count = {240,0};//在TimerTask中使用需要改成数组,
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
if (count[0] ==0){//如果240次跳完,则取消Timer循环
timer.cancel();//取消循环
}else {
count[0]--;//需要240次,每次减1
count[1]=(int) Math.floor(100-(single*count[0]));//当前进度
Log.i("当前进度",""+count[1]);
progressBar.setProgress(count[1]);//设置当前进度
}
}
},0,1000);//延迟0秒执行,1000毫秒执行一次