android 硬件加速帶來的問題

今天碰到一個奇葩的問題,我用surfaceview顯示外接攝像頭的視頻,前幾個版本沒問題,這個版本一充電就會出現花屏現象,後來追蹤問題,發現是我引用其他同事的activity基類,他在基類庫中做了電量充電的動畫,這個版本後他優化了電量充電動畫,速度變快了,導致硬件加速負荷過大,surfaceview跟着刷新出現問題。

解決方法一:去掉頭部調用的基類,視頻播放恢復正常

解決方法二:在manifest中加入

android:hardwareAccelerated="false"

這是關閉硬件加速的接口,但是會導致一個窗口視頻白屏,退出時才閃現



來源未知,只對特定機型出現問題。如果你也遇到了,可以考慮是不是硬件加速(Hardware Acceleration)的錯

從Android3.0 (API level 11)開始,Android的2D顯示管道被被設計得更加支持硬加速了.硬加速使用GPU承擔了所有在View的canvas上執行的繪製操作。

硬件加速是個好東西,可以讓ListView、WebView滑動的更流暢,但是也總是會出現莫名其妙的的問題。

問題1:EditText中文字的重疊


這是我之前一個博客中解決過的問題,詳見:http://blog.csdn.net/icyfox_bupt/article/details/12837093

在某些4.x的機器中,如果打開了硬件加速,EditText會出現奇怪的文字重疊的情況。



解決的方法:對EditText關閉硬件加速即可。


問題2:圖片無法顯示

做的程序裏有的時候會需要加載大圖,但是硬件加速中 OpenGL對於內存是有限制的。如果遇到了這個限制,LogCat只會報一個Warning: Bitmap too large to be uploaded into a texture (587x7696, max=2048x2048)


這時我們就需要把硬件加速關閉了。

但開始我是這樣處理的,我關閉了整個應用的硬件加速:

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <application  
  2.     android:allowBackup="true"  
  3.     android:icon="@drawable/ic_launcher"  
  4.     android:hardwareAccelerated="false"  
  5.     android:label="@string/app_name"  
  6.     android:theme="@style/AppTheme" >  

隨後我就發現,雖然圖片可以顯示了,但是ListView和WebView等控件顯得特別的卡,這說明硬件加速對於程序的性能提升是很明顯的。所以我就改爲對於Activity的關閉

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <activity  
  2.     android:name="icyfox.webviewimagezoomertest.MainActivity"  
  3.     android:label="@string/app_name"  
  4.     android:hardwareAccelerated="false"  
這樣問題得到了較好的解決,實際上,我們還可以對每個控件是否加速進行控制。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章