图1:
文章图片
图2:
文章图片
图3:
文章图片
activity_main.xml
MainActivity.java:
public class MainActivity extends AppCompatActivity {@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}public void showPD(View v){final ProgressDialog dialog = ProgressDialog.show(this,"数据加载","数据加载中...");
//模拟做一个长时间的工作
//长时间的工作不能在主线程做,得启动 子线程 完成
new Thread(){
@Override
public void run() {
for (int i=0;
i<20;
i++){
//休息一会
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//移除 dialog
dialog.dismiss();
//虽然是在子线程中执行的,但是内部使用Handler实现主线程更新UI//不能再子线程直接更新UI,Toast//将 子线程 切换 主线程 去更新UI
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this,"加载完成了!!!",Toast.LENGTH_LONG).show();
}
});
}
}.start();
//注意Toast不能放在这个位置进行提示,因为多线程的意思就是在不断往下执行代码的过程中,也不断的在做线程中的逻辑问题,那么如果这样么写
//就会造成 Toast 直接提示了,应该要放在子线程执行完后,再去执行
//Toast.makeText(MainActivity.this,"加载完成了!!!",Toast.LENGTH_LONG).show();
}}
【Android|Android 实现 圆形进度对话框 和 水平进度对话框 —— ProgressDialog】总结:
1. 子线程不能更新UI界面2. 启动子线程代码:
new Thread(){
@Override
public void run() {}}.start();
3. 在子线程中切换回主线程代码:
runOnUiThread(new Runnable() {
@Override
public void run() {}
});
4. 要注意线程的执行和方法的顺序向下执行代码块是同时进行的!