SurfaceView

    surface是SurfaceView的一個可見區域,它對應了一個內存區域,由於內存區域的對象都是有生命週期的,可以動態申請創建和銷燬,當然也可能是更新。於是就有了作用於這個內存區的操作,即surcaceCreated/Changed/Destroyed.

    getHolder().addCallback(this);方法是獲取surface的holder來註冊callback也就是註冊上面3個函數。

    一般,我們會在surfaceCreated函數中創建另外一個線程。所以這裏有2個線程,UI線程和渲染線程。畫圖線程是由UI線程調用surfaceCreated時創建的,在surfaceDestroyed調用時放回線程池。在此期間,畫圖線程負責圖形的繪製。

    在該模式下,UI線程負責和用戶交互,畫圖線程負責繪製圖形。我們知道,線程共享內存數據,所以surface是對於兩個線程共享的。所以爲了避免畫圖的時候UI線程也對surface進行操作的話,就在畫圖前對canvas加鎖。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章