Android硬體加速

來源:互聯網
上載者:User

Android從3.0(API Level 11)開始,在繪製View的時候支援硬體加速,充分利用GPU的特性,使得繪製更加平滑,但是會多消耗一些記憶體。
      開啟或關閉硬體加速:

      由於硬體加速自身並非完美無缺,所以Android提供選項來開啟或者關閉硬體加速,預設是關閉。可以在4個層級上開啟或者關閉硬體加速:

      Application層級:<applicationandroid:hardwareAccelerated="true" ...>

      Activity層級:<activity android:hardwareAccelerated="false" ...>

      Window層級:


 

 getWindow().setFlags( WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);     getWindow().setFlags( WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); 

注意:目前為止,Android還不支援在Window層級關閉硬體加速。

      View層級:

 myView.setLayerType(View.LAYER_TYPE_HARDWARE, null); myView.setLayerType(View.LAYER_TYPE_HARDWARE, null);

  注意:目前為止,Android還:不支援在View層級開啟硬體加速。

 

檢測當前是否啟用了硬體加速:


 

/ 方法一  // 此方法返回true,如果myView掛在一個開啟了硬體加速的Window之下,  // 也就是說,它在繪製的時候不一定使用了硬體加速,getDrawingCache  myView.isHardwareAccelerated();                          // 方法二  // 返回true,如果canvas在繪製的時候啟用了硬體加速  // 盡量採用此方法來判斷是否開啟了硬體加速  canvas.isHardwareAccelerated(); // 方法一// 此方法返回true,如果myView掛在一個開啟了硬體加速的Window之下,// 也就是說,它在繪製的時候不一定使用了硬體加速,getDrawingCachemyView.isHardwareAccelerated();                       // 方法二// 返回true,如果canvas在繪製的時候啟用了硬體加速// 盡量採用此方法來判斷是否開啟了硬體加速canvas.isHardwareAccelerated(); 

理解View的繪製模型:

      1.沒有硬體加速:invalidate the view hierarchy ------> draw the view hierarchy

      2.有硬體加速:invalidate the view hierarchy ------> record and update the display list ------> draw the display list

      硬體加速的限制:

      目前,Android對硬體加速的支援並非完美,有些繪製操作在開啟硬體加速的情況下不能正常工作(具體的列表可以參考Android開發人員文檔)。

      不過Android可以保證內建的組件和應用支援硬體加速。因此,如果應用中只使用了標準UI組件,可以放心開啟硬體加速。

      隨著Android的版本升級,相信一段時間之後,硬體加速可以得到完美的支援。

      開啟硬體加速之後的異常反應:

      1.某些UI元素沒有顯示:可能是沒有調用invalidate

      2.某些UI元素沒有更新:可能是沒有調用invalidate

      3.繪製不正確:可能使用了不支援硬體加速的操作, 需要關閉硬體加速或者繞過該操作

      4.拋出異常:可能使用了不支援硬體加速的操作, 需要關閉硬體加速或者繞過該操作

 


 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.