Android 实现 圆形进度对话框 和 水平进度对话框 —— ProgressDialog

图1:
Android 实现 圆形进度对话框 和 水平进度对话框 —— ProgressDialog_第1张图片
图2:
Android 实现 圆形进度对话框 和 水平进度对话框 —— ProgressDialog_第2张图片
图3:
Android 实现 圆形进度对话框 和 水平进度对话框 —— ProgressDialog_第3张图片
activity_main.xml

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="圆形进度条对话框"
        android:onClick="showPD"
        android:layout_gravity="center"
        android:layout_marginTop="80dp" />

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();

    }

}

总结:

1.	子线程不能更新UI界面

2.	启动子线程代码:
	new Thread(){
            @Override
            public void run() {
            
            }
          
        }.start();
        
3.	在子线程中切换回主线程代码:
 	runOnUiThread(new Runnable() {
                    @Override
                    public void run() {

                    }
       });

4.	要注意线程的执行和方法的顺序向下执行代码块是同时进行的!

你可能感兴趣的:(Android,学习)