图1:

图2:

图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.要注意线程的执行和方法的顺序向下执行代码块是同时进行的!

更多相关文章

  1. android实现字体闪烁动画的方法
  2. 浅析Android中的消息机制-解决:Only the original thread that cr
  3. 在Fragment中设置控件点击方法,执行失败。
  4. Android异步消息机制之Handler
  5. Android的Handler机制详解3_Looper.looper()不会卡死主线程
  6. Android(安卓)之 AsyncTask 异步任务
  7. Android之Handler用法总结
  8. Android开发之消息处理机制(一)——Handler
  9. Android出现java.lang.RuntimeException: Can't toast on a thre

随机推荐

  1. Google Android(安卓)Developer
  2. Android内存泄漏查找和解决
  3. Android(安卓)数据库更新
  4. Android压力测试利器---Monkey
  5. Android(安卓)SQLite批量插入数据速度解
  6. AIDL基本用法
  7. Java基础知识JNI 在Android中使用System.
  8. 关于Google IO 2015,你必须知道的9件事
  9. interllij IDEA 导入 Android(安卓)项目
  10. Android开发之:Toast和Notification