Android-進階之自定義View 二 View的刷新模式


自定義的View一般都不是靜態的,所以都需要對其進行刷新:
根據實際使用的不同場合需要采用不同的刷新策略,下面是三種常用的刷新方式:

  • 不使用多線程和雙緩沖
    這種情況一般使用在不需要頻繁刷新的情況下,只需顯式地調用View中的invalidate()方法系統會自動調用View的onDraw()方法。
  • 使用多線程但不使用雙緩沖
    這種情況需要開啟新的線程,但是我們知道如果在非UI線程中訪問View對象就會報如下錯誤:

    android.view.ViewRoot$CalledFromWrongThreadException:
    Only the original thread that created a view hierarchy can touch its views.
    

    這時候就需要結合Handler來處理了,只要新建一個Handler,在新線程創建並發送一個Message,然后再主線程中捕獲、處理該消息。

  • 使用多線程和雙緩沖
    這個就是通過SurfaceView來實現的,我們在繪圖專題中已經對SurfaceView進行介紹了,大家可以翻閱之前的博文,查看。

Android中實現view的更新有兩組方法,一組是invalidate,另一組是postInvalidate,其中前者是在UI線程自身中使用,而后者在非UI線程中使用。
Android提供了Invalidate方法實現界面刷新,但是Invalidate不能直接在線程中調用,因為他是違背了單線程模型:Android UI操作並不是線程安全的,並且這些操作必須在UI線程中調用。
Android程序中可以使用的界面刷新方法有兩種,分別是利用Handler和利用postInvalidate()來實現在線程中刷新界面。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM