你真正瞭解UI執行緒更新的幾種方式嗎——面試必備之UI重新整理大解密
我們都知道一般面試的時候都會問道Handler的執行機制。有些時候面試官不會直接問道。但是如果問道UI執行緒更新的方式有哪幾種,你知道多少?
今天我們用demo來探討一下主執行緒中更新的幾種方式
通過簡單的點選按鈕來實現更新一張我女神的圖片
測試效果:
首先我們要知道Handler的執行機制:
這裡不再做過多的講解。請參考
第一種方式
通過Handler傳送post一個Runnable物件來實踐,post原始碼:
post(Runnable r)—–>
sendMessageDelayed(getPostMessage(r), 0);
—->
sendMessageAtTime。可以看出最終是通過sendMessageDelayed方法進行傳送一個物件的,。
第二種方式
第二種方式是通handler的post方法。與第一種方式大同小異。
第三種方式
這種方式我們也經常用到。其實每部也是呼叫的是Handler的post方法,內部程式碼如下:
先判斷當前的執行緒是否為主執行緒,如果是當前的執行緒是主執行緒,則直接執行,是非主執行緒的話,呼叫post方法。
第四種方式
這種方式直接呼叫的View裡面的post
View中的post原始碼如下:
很多人都不知道,View自己內部也封裝了自己的非同步處理機制,從上面就可以看出,呼叫的是ViewRootImpl.getRunQueue()的post方法,而在Handler內部呼叫post的時候,先呼叫的是sendMessageDelayed方法,然後呼叫sendMessageAtTime方法,緊接著呼叫enqueueMessage,最終呼叫的是queue.enqueueMessage,最終執行的方式都是一樣的。
最終效果圖點選送一個美女:
測試用例專案地址:
更多文章
相信自己,沒有做不到的,只有想不到的
如果你覺得此文對您有所幫助, 歡迎加入微信公眾號:終端研發部