Android(安卓)实现 圆形进度对话框 和 水平进度对话框 —— ProgressDialog
16lz
2022-07-25
图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.要注意线程的执行和方法的顺序向下执行代码块是同时进行的!
更多相关文章
- android实现字体闪烁动画的方法
- 浅析Android中的消息机制-解决:Only the original thread that cr
- 在Fragment中设置控件点击方法,执行失败。
- Android异步消息机制之Handler
- Android的Handler机制详解3_Looper.looper()不会卡死主线程
- Android(安卓)之 AsyncTask 异步任务
- Android之Handler用法总结
- Android开发之消息处理机制(一)——Handler
- Android出现java.lang.RuntimeException: Can't toast on a thre