android怎麼樣在子執行緒例項化的handler去更新

時間 2022-02-03 02:40:12

1樓:匿名使用者

之前用過android-async-http,雖然沒認真看過原始碼,但也有簡單的瀏覽過,心裡一直有個疑問,因為android-async-http也是採用hanlder機制來執行**的,也就是說handler是它例項化的,可我們知道handler的乙個重要作用是將乙個任務切換到handler所在的執行緒去執行的,我的疑問就是:如果我們在子執行緒呼叫android-async-http的網路請求,這時候如果handler是在子執行緒被例項化的呢(當然我沒認真研究過原始碼,也不知道它是怎麼實現),還能更新ui嗎?

我們都正常以為handler在哪個執行緒例項化的,我們通過handler就可以把任務切換到該任務去執行,我們看如下**:

private void initd()

};looper.loop();

handler.sendemptymessage(0);

}}).start();

}經過我的測試上面這段方法是無法更新ui的,因為handler是在子執行緒例項化的,並非在ui執行緒,也證實了我們的想法。

如果我的疑問存在(我沒嘗試過在子執行緒使用android-async-http,不知道什麼情況,這裡只是做個假設),那麼它使怎麼實現的呢。

最近看了android開發藝術探索,特意去研究了一下android的訊息機制,才弄明白了handler的工作原理,其實起關鍵作用的是looper並不是handler,我們先來看下looper的構造方法:

private looper(boolean quitallowed)

looper會把所在的當前的執行緒儲存起來,而handler的工作需要looper,於是我嘗試了一下如下**:

private void init()

};handler.sendemptymessage(0);

}}).start();

}handler例項化的時候,我傳入的是ui執行緒的looper,確實是可以更新ui。

總結:1、handler執行任務不是在它例項化所在的執行緒決定的,而是關鍵在於looper。

2、我們可以在子執行緒例項化handler並且可以用它來更新ui了。

2樓:匿名使用者

直接使用handler.post的形式進行更新介面ui即可。或者使用控制項的同步方法。

在android子執行緒中初始化handler後,為什麼該子執行緒也能更新ui?(大神請進)

3樓:匿名使用者

子執行緒的hanlder裡面是不能更新android ui的。

簡單說下:

如果你在子執行緒裡面建立hander是用的是以下**:

new handler(looper.getmainlooper())

那還是用的主線程的looper

android通過handler使子執行緒更新ui

4樓:匿名使用者

你這**寫的問題太多了,不過你的需求倒是很容易實現,把textview物件傳到serverthread執行緒中 在serverthread 寫如下**:

handler handler = new handler(looper.getmainlooper())

5樓:匿名使用者

沒有所謂好不好,在其他執行緒更新ui最終還是轉變為在ui執行緒裡更新,因為ui執行緒是主線程,其他執行緒想直接操作ui是不行的,可以借助handlerandmessage機制。如果你的功能邏輯複雜度較高,就是說執行時間較長,那麼最好是另開乙個執行緒做邏輯處理,

android程式設計:如何在子執行緒中更新textview控制項

如何在android一條單獨執行緒,更新ui ?

6樓:網路營銷專家

方法有兩種:

通過繼承thread類,重寫run方法來實現通過繼承介面runnable實現多執行緒

主要接受子執行緒傳送的資料, 並用此資料配合主線程更新ui.

handler的主要作用:主要用於非同步訊息的處理handler的執行過程:

當(子執行緒)發出乙個訊息之後,首先進入乙個(主線程的)訊息佇列,傳送訊息的函式即刻返回,而在主線程中的handler逐個的在訊息佇列中將訊息取出,然後對訊息進行處理。這樣就實現了跨執行緒的ui更新(實際上還是在主線程中完成的)。

這種機制通常用來處理相對耗時比較長的操作,如訪問網路比較耗時的操作,讀取文大檔案,比較耗時的操作處理等。

在大白話一點的介紹它的執行過程:

啟動應用時android開啟乙個主線程

(也就是ui執行緒) , 如果此時需要乙個耗時的操作,例如:

聯網讀取資料,或者讀取本地較大的乙個檔案的時候,你不能把這些操作放在主線程中,如果你放在主線程中的話,介面會出現假死現象(這也就是你在主線程中直接訪問網路時會提示你異常的原因,如我們上篇文章所述android主線程不能訪問網路異常解決辦法)。

7樓:匿名使用者

android中非ui執行緒是不能對ui進行操作的,你可以在單獨執行緒執行耗時操作,然後通過handler去更新ui。或者你可以使用asynctask。

8樓:楊丫丫不知道

看些這個部落格上的內容,我想你就會很清楚了!

石河子大學怎麼樣,石河子大學到底怎麼樣

上驀然 石河子大學是國家 211工程 重點建設高校和國家西部重點建設高校,現由教育部和新疆生產建設兵團共建,是 中西部高校綜合實力提升工程 一省一校 入選高校。學校前身誕生於1949年9月中國人民解放軍解放新疆的進軍途中,1996年4月由農業部部屬的石河子農學院 石河子醫學院 兵團師範專科學校和兵團...

石河子大學臨床怎麼樣,石河子大學到底怎麼樣

暖暖炊煙裊裊 石河子大學臨床醫學專業屬於國家級特色專業。石河子大學臨床醫學專業簡介 1 學歷 本科 2 學制 五年 3 培養目標 本專業培養具有基礎醫學 臨床醫學和現代醫學技術等方面的基本理論知識和基本技能的高階醫學專門人才。4 就業方向 在各級醫療衛生機構從事臨床醫療 預防和衛生服務工作,在醫學教...

你覺得闞清子的演技怎麼樣,闞清子演技怎麼樣?是怎麼火起來的?

闞清子很少甚至幾乎沒有成為過電影或者電視劇的大女主,從她個人參加的節目和參演的電視劇來看我發覺闞清子個人所擁有的演技其實比較寫真。拍戲的時候經常會習慣個人真實感情的流露可能是因為缺乏平臺和資源,我認為闞清子原本完全可以在好的平臺和資源之中展現出個人的演技和魅力來。她參加的綜藝節目數量遠遠超過了她所演...