package cn.tedu.progress;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
ProgressBar pbProgress;
TextView tvProgress;
Button btStart;
// 1.声明Handler
Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pbProgress = findViewById(R.id.pb_progress);
tvProgress = findViewById(R.id.tv_progress);
btStart = findViewById(R.id.bt_start);
btStart.setOnClickListener(this);
//3.创建自定类的Handler对象
handler=new InnerHandler();
}
//2.自定义类继承Handler,重写handleMessage方法
class InnerHandler extends Handler{
//该方法可以接受子线程发送的数据,该方法运行在主线程
public void handleMessage(Message msg) {
super.handleMessage(msg);
int progress=msg.arg1;//接受子线程发送的数据,50毫秒接收一次
pbProgress.setProgress(progress);
tvProgress.setText(progress+"/ 100");
if(progress == 100) {
btStart.setEnabled(true);
}
}
}
@Override
public void onClick(View v) {//该方法运行在主线程
//点击按钮后,5秒钟进度条从0更新到100,属于耗时操作,所创建并开启子线程
WorkThread workThread = new WorkThread();
workThread.start();
//按钮禁用
btStart.setEnabled(false);
}
class WorkThread extends Thread {
public void run() {
for (int i = 1; i <= 100; i++) {
try {
Thread.sleep(50);//休眠50毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
Message msg=new Message();
msg.arg1=i;//将进度封装到Message对象
handler.sendMessage(msg);
}
}
}
}
package cn.tedu.progress;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
ProgressBar pbProgress;
TextView tvProgress;
Button btStart;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pbProgress=findViewById(R.id.pb_progress);
tvProgress=findViewById(R.id.tv_progress);
btStart=findViewById(R.id.bt_start);
btStart.setOnClickListener(this);
}
@Override
public void onClick(View v) {//该方法运行在主线程
//点击按钮后,5秒钟进度条从0更新到100,属于耗时操作,所创建并开启子线程
WorkThread workThread=new WorkThread();
workThread.start();
//按钮禁用
btStart.setEnabled(false);
}
class WorkThread extends Thread{
int i=1;
public void run() {
for(;i<=100;i++){
try {
Thread.sleep(50);//休眠50毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
runOnUiThread(new Runnable() {
@Override
public void run() {
pbProgress.setProgress(i);//设置进度条的进度
tvProgress.setText(i+"/ 100");
}
});
}//进度条更新完毕
runOnUiThread(new Runnable() {
@Override
public void run() {
btStart.setEnabled(true);//更新UI
}
});
}
}
}