常見面試第四題

今天我們來講講在面試當中最常見的,最常常被問到的第四題,近期由於小編工作比較忙碌,更新的比較緩慢還請大家見諒。

我相信大家在面試當中肯定會經常被問題view的重繪的問題,比如說:怎樣重新自定義一個控制項了?怎樣實現一個滾動的控制項了?怎樣畫一個折線圖了等等。其實就缺少不了我們題目所說的那個問題,就是requestLayout,invalidate和postInvalidate的異同。現在我給大家分別來簡單的介紹一下,明白了這些,面試中再遇到這樣的問題,保准你能輕鬆通過。

1、android中實現view的更新有幾種方法?

你知道嗎?其實android中實現view的更新有兩種方法,一種是invalidate,另一種是postInvalidate,其中前者是在UI線程自身中使用,而後者在非UI線程中使用。

Advertisements

怎麼說呢?Android提供了Invalidate方法實現界面刷新,但是Invalidate不能直接在線程中調用,因為他是違背了單線程模型:AndroidUI操作並不是線程安全的,並且這些操作必須在UI線程中調用。鑒於此,如果要使用invalidate的刷新,那我們就得配合handler的使用,使非同步非ui線程轉到ui線程中調用,如果要在非ui線程中直接使用就調用postInvalidate方法即可,這樣就省去使用handler的煩惱。

2、requestLayout在什麼時候用呢?

當view確定自身已經不再適合現有的區域時,該view本身調用這個方法要求parentview(父類的視圖)重新調用他的onMeasureonLayout來重新設置自己位置。特別是當view的layoutparameter發生改變,並且它的值還沒能應用到view上時,這時候適合調用這個方法。

Advertisements

通過上面簡單的介紹我相信大家應該有了一定的了解,如果還有什麼疑問可以在我們建的微信群里或者非著名程序員QQ交流群里大家互現發表一下看法,共同努力進步。

好了,第四題先到這裡,敬請期待第五題吧,我準備給大家介紹10道常見的面試題,現在如果你們有什麼好的想法或者問題也可以發給我,我給大家整理一下。

更多內容和資訊或者問題,更多乾貨分享,盡在我的個人微信公眾號,微信名:非著名程序員,微信號:smart_android(←長按複製)。個人微信號:loonggg微博:澀郎

Advertisements

你可能會喜歡