Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android更新UI的四種方式

Android更新UI的四種方式

編輯:關於Android編程

前言

相信初學Android開發的朋友來說,應該都會遇到一個問題,我們開啟了一個線程,在這個線程裡面我們進行了更新UI的操作,也許是在TextView顯示了一行文字,也許是改變了ImageView顯示的圖片,雖然只是看似簡單並且正確的操作,但是Android系統讓你的程序光榮的崩潰了,並且你還不知道為什麼錯,這才是最痛苦的,曾經深受這種痛苦的我,為了不再讓這種痛苦蔓延下去,我決定把更新UI的幾種方法給大家好好說說,讓大家在Thread的run方法中可以隨心所欲的更新UI,再也不用痛苦了。


實現

利用Handler類的post方法

我們首先需要在MainActivity中生成一個Handler類的對象,可以不用實現handMessage方法,因為Handler類的對象此時不是處理消息而是充當發送消息的角色。

handler.post(new Runnable() {

            @Override
            public void run() {
                mTextView.setText("OK");
            }
        });

這樣,我們出入一個Runnable,在裡面實現我們更新UI的代碼,然後就可以更新了,不會崩潰的。

利用Handler自己的處理消息的方法
我們知道Handler可以發送消息也可以處理消息,第一種方法我們用到了發送消息的功能,現在我們用它處理消息的功能。 我們需要生成一個Handler對象,並且我們需要覆蓋它的處理消息的方法,然後我們自己實現我們需要的內容,如下面所示:
private Handler handler = new Handler(){
        public void handleMessage(android.os.Message msg){
            mTextView.setText("ok");
        };
    };

可以看到,我覆蓋了handleMessage方法,然後在裡面我添加了更新UI的代碼,當然也是正確的,可以成功的更新UI。然後我們需要在MainActivity中調用Handler的發送消息的方法,給自己發送消息,然後才能處理,我們可以簡單的調用一個方法發送一個空消息即可:handler.sendEmptyMessage(0);

在runOnUiThread方法中更新UI
runOnUiThread(new Runnable() {

            @Override
            public void run() {
                mTextView.setText("updateUI->ok");

            }
        });

runOnUiThread方法,根據其名稱我們就可以知道這個方法可能就是用來更新UI的,因為更新UI必須在UI線程,其他線程不允許更新UI,所以我們在runOnUiThread方法中傳入一個Runnable,然後我們在裡面實現我們的操作就可以了。這個方法和第一個方法還是很像的,我個人還是比較喜歡這個方法的,因為它不需要一個Handler的對象,我覺得很方便啦。

View調用post方法實現更新UI
其他的三種方法我們都是通過其他的類和方法來實現View的更新,最後一個方法是View自己調用自己的方法來實現更新,不過還都是大同小異的問題,最後實現的原理還都是差不多的。
mTextView.post(new Runnable() {

            @Override
            public void run() {
                mTextView.setText("ViewUI->ok");
            }
        });

我們同樣需要傳入Runnable,然後更新就可以了。


總結

因為Android系統在設計的時候就不讓我們在非UI線程進行更新UI的操作,不僅如此我們也不能在UI線程進行連接網絡的操作,如果不知道的朋友可能會被坑死吧(本人已被坑過),都是為了UI線程的安全性,我們如果需要在UI線程進行更新操作,比如顯示下載進度啦,更新進度條等等,我們這時候就需要一個能在UI線程和非UI線程進行通信的對象,通知UI線程去更新非UI線程的要求,這個對象我想Handler應該就是它了,至於Handler的重要性,我就不累述了,有興趣的大家可以自己去找一些相關的資料來看,弄懂Handler機制的存在意義及使用方法,相信對開發還是很有幫助的。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved