你真正瞭解UI執行緒更新的幾種方式嗎—面試必備之深度揭祕

codeGoogle發表於2017-10-26

你真正瞭解UI執行緒更新的幾種方式嗎——面試必備之UI重新整理大解密

我們都知道一般面試的時候都會問道Handler的執行機制。有些時候面試官不會直接問道。但是如果問道UI執行緒更新的方式有哪幾種,你知道多少?

今天我們用demo來探討一下主執行緒中更新的幾種方式

通過簡單的點選按鈕來實現更新一張我女神的圖片

測試效果:

效果圖.gif
效果圖.gif

首先我們要知道Handler的執行機制:

Handler執行機制之流程
Handler執行機制之流程

這裡不再做過多的講解。請參考

第一種方式

第一種方式.png
第一種方式.png

通過Handler傳送post一個Runnable物件來實踐,post原始碼:

11.png
11.png
111.png
111.png

post(Runnable r)—–>
sendMessageDelayed(getPostMessage(r), 0);
—->
sendMessageAtTime。可以看出最終是通過sendMessageDelayed方法進行傳送一個物件的,。

第二種方式

第二種方式.png
第二種方式.png

第二種方式是通handler的post方法。與第一種方式大同小異。

第三種方式

第三種方式.png
第三種方式.png

這種方式我們也經常用到。其實每部也是呼叫的是Handler的post方法,內部程式碼如下:

先判斷當前的執行緒是否為主執行緒,如果是當前的執行緒是主執行緒,則直接執行,是非主執行緒的話,呼叫post方法。

第四種方式

第四種方式.png
第四種方式.png

這種方式直接呼叫的View裡面的post

View中的post原始碼如下:

很多人都不知道,View自己內部也封裝了自己的非同步處理機制,從上面就可以看出,呼叫的是ViewRootImpl.getRunQueue()的post方法,而在Handler內部呼叫post的時候,先呼叫的是sendMessageDelayed方法,然後呼叫sendMessageAtTime方法,緊接著呼叫enqueueMessage,最終呼叫的是queue.enqueueMessage,最終執行的方式都是一樣的。

最終效果圖點選送一個美女:

效果圖.gif
效果圖.gif

測試用例專案地址:

github.com/androidstar…

更多文章

2017上半年技術文章集合—184篇文章分類彙總

那些年不容錯過的智慧重新整理載入框

NDK專案實戰—高仿360手機助手之解除安裝監聽

高階UI特效仿直播點贊效果—一個優美炫酷的點贊動畫

一個實現錄音和播放的小案例

相信自己,沒有做不到的,只有想不到的

如果你覺得此文對您有所幫助, 歡迎加入微信公眾號:終端研發部

技術+職場
技術+職場

來源:https://juejin.im/post/59f1f965f265da43247fade2#comment

相關文章