圖1:
圖2:
圖3:
activity_main.xml
<Buttonandroid: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" />
alertdialog對話框、MainActivity.java:
public class MainActivity extends AppCompatActivity {@Overrideprotected 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(){@Overridepublic void run() {for (int i=0;i<20;i++){// 休息一會try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}// 移除 dialogdialog.dismiss(); //雖然是在子線程中執行的,但是內部使用Handler實現主線程更新UI// 不能再子線程直接更新UI, Toast// 將 子線程 切換 主線程 去更新UIrunOnUiThread(new Runnable() {@Overridepublic 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(){@Overridepublic void run() {}}.start();3. 在子線程中切換回主線程代碼:runOnUiThread(new Runnable() {@Overridepublic void run() {}});4. 要注意線程的執行和方法的順序向下執行代碼塊是同時進行的!
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态