Android中如何在子線程執行任務完成後更新UI

1 AsyncTask(或者Thread)+Handler

啓動子線程,子線程執行完任務後,通過Handler給主線程中的Looper發送消息

2 Activity.runOnUiThread(Runnable r)

在Activity中啓動子線程,子線程執行完成任務後,調用runOnUiThread(Runnable r)。runOnUiThread(Runnable r)是Activity中的方法,方法裏會判斷當前線程是否是UI線程,如果是,run()方法在UI線程執行,如果不是,通過mHandler把Runnable發送到主線程的Looper中,Looper取出消息再分發給mHandler,mHandler收到消息後,回調run()方法。mHandler是Activity中一個final修飾的成員,所有的Activity對象共用這一個handler對象。



3 View.post(Runnable r)

view.post(Runnable r)是view中的方法,方法裏會判斷AttachInfo是否爲空,(AttachInfo類似於window對象)如果不爲空,說明當前線程是UI線程,會調用Activity中的mHander post一個runnable到主線程的looper中。如果是其他線程的話,runnable會發送到ViewRootImpl的內部類RunQueue中, RunQueue中有個Arraylist存儲所有的Runnable, 最終會遍歷Arraylist中的Runnable,還是通過Activity中的mHandler發送到主線程的looper中。


4 設置監聽器,子線程完成任務後,回調監聽器的方法

例如,子線程發送http請求獲取title,拿到title後,在activity的textView中顯示






發佈了83 篇原創文章 · 獲贊 9 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章