在我们使用进度条 ProgressBar的时候
它的常用属性为:
进度条默认为圆形 ,但是我们这里使用是线型
style="?android:attr/progressBarStyleHorizontal"
android:progress=“33”
android:max=“100”
线程休眠
Thread.sleep(100);//抛异常
SystemClock.sleep(100);//不会抛异常
public class MainActivity extends AppCompatActivity {
private ProgressBar pb_main_pb1;
private int progress;
private TextView tv_main_tv1;
private MyHandler myHandler = new MyHandler();
private int code = 1;
private class MyHandler extends Handler{
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(code == msg.what){
progress ++;
pb_main_pb1.setProgress(progress);
tv_main_tv1.setText(progress+"%");
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pb_main_pb1 = this.findViewById(R.id.pb_main_pb1);
tv_main_tv1 = this.findViewById(R.id.tv_main_tv1);
}
public void studyToast(View view) {
Toast.makeText(this, "hello Toast", Toast.LENGTH_LONG).show();
}
public void setProgressBar(View view) {
if(0 == progress){
new MyThread().start();
}
}
private class MyThread extends Thread{
@Override
public void run() {
super.run();
while (true){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(progress == 100){
progress =0;
break;
}
Message msg = new Message();
msg.what = 1;
myHandler.sendMessage(msg);
}
}
}
}
线程注意事项:
我们在操作 (ProgressBar除外) 控件时如果把控件放在子线程里就会出问题,所以我们这里通过MyHandler来处理这个问题。
我们在平常中下载资源时肯定不止是一个的,所以我们通过msg.what = (1,2,3,4…);来代表每一个进程,然后用MyHandler 来获取它的值,然后经过if判断来调用这个线程就行了,这里为了简单的诉说整个过程我采用的是if,你们可以用swith这样会更好一点。
SubThread->MainThread 错误
SubThread->Handler->MainThread 正确