Android更新UI的兩種方法——handler與runOnUiThread()

來源:互聯網
上載者:User

標籤:android開發   線程   ui   

在Android開發過程中,常需要更新介面的UI。比如網路請求操作、一些耗時操作都不能放在UI線程中啟動並執行,需要放在子線程,而子線程又不能更新UI介面,這是我們需要引入一個Handler,訊息處理機制。更新UI是要主線程(UI線程)來更新的,即UI線程更新。如果在主線線程之外的線程中直接更新頁面顯示常會報錯。拋出異常:android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
只有原始建立這個視圖層次(view hierachy)的線程才能修改它的視圖(view)
下面有這兩種方法來更新UI介面。1、建立一個Handler類的執行個體,然後實現這個類中handleMessage()回呼函數,在這個回呼函數中來操作更新UI介面,然後它是怎麼知道什麼時候要更新介面呢?就需要通過Handler發送一個訊息給訊息佇列。mHandler.sendEmptyMessage(what);來辨別具體更新什麼UI介面。
private Handler mHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);switch (msg.what) {case GET2CODE_SUCCESS:dialog.dismiss();set2CodeShow();break;case CONN_FAILED:dialog.dismiss();set2CodeShow();Toast.makeText(GoodsInfo.this, "串連失敗", Toast.LENGTH_SHORT).show();break;default:break;}}};
mHandler.sendEmptyMessage(GET2CODE_SUCCESS);或者建立一個訊息對象,Message msg = new Message();msg.what=GET2CODE_SUCCESS;然後通過mHandler.sendMessage(msg);來發送訊息給訊息佇列,當然也可以發送對象資料,即用msg.obj= Object來發送對象。

2、利用Activity.runOnUiThread(new Runnable{run(){}})把更新需要的UI代碼建立在run()方法中,這個其實原理也是通過Handler來發送訊息給主線程的。

Android更新UI的兩種方法——handler與runOnUiThread()

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.