編輯:安卓省電與加速
發現自己的手機上某個界面出現了花屏,某些控件背景被拉伸過多遮住了其他控件,很難看。這種現象高概率出現,分析了下發現:一旦發生這種現象,必然會打印下面這種log,google了下,這種log應該是硬件加速引入的。在從view層級關閉了硬件加速開關之後,問題沒有再出現。
[plain]
D/OpenGLRenderer(10887): GL error from OpenGLRenderer: 0x501
E/OpenGLRenderer(10887): GL_INVALID_VALUE
D/OpenGLRenderer(10887): GL error from OpenGLRenderer: 0x501
E/OpenGLRenderer(10887): GL_INVALID_VALUE 硬件加速開關是android3.0開始引入的,大致有個印象,但是我們代碼中並沒有打開過硬件加速開關。自己寫了個demo,log顯示硬件加速開關確實已經被打開。看來是google做了些什麼,去官方文檔上看了看,有下面一句話:
Beginning with Android 4.0, hardware acceleration for all windows is enabled by default if your application has set either targetSdkVersion or minSdkVersion to “14" or higher.
到這裡,硬件加速開關打開的原因找到了,為什麼在這個應用的這個界面才會引入問題呢。
先學習下android硬件加速的一些概念再說。android自3.0引入了硬件加速,即使用GPU進行繪圖,旨在得到更加平滑的動畫更加平滑滾動,和更好的總體性能和響應用戶的交互。但是硬件加速並不能完善的支持所有的繪圖,通常表現為內容不可見,異常或渲染錯誤。一般出現了問題,就需要關閉硬件加速開關。為了方便控制硬件加速開關,android在四個層面提供了支持:
1.Application level:在AndroidManifes文件中給application標簽增加如下配置語句,即可打開硬件加速開關,這個開關對整個應用起作用。
[html]
<application android:hardwareAccelerated="true" ...>
<application android:hardwareAccelerated="true" ...>2.Activity level:同樣還是在AndroidManifes文件中,給activity標簽增加如下配置語句,即可關閉硬件加速開關,這個開關對當前activity起作用,可以覆蓋1中的application開關:
[html]
<application android:hardwareAccelerated="true">
<activity ... />
<activity android:hardwareAccelerated="false" />
</application>
<application android:hardwareAccelerated="true">
<activity ... />
<activity android:hardwareAccelerated="false" />
</application>3.Window level:在代碼中增加下面代碼,即可在窗口級別打開硬件加速開關。注意在窗口級別,只能打開硬件加速開關,不能關閉,不同上面1,2。
[html]
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);4.View level:在代碼中給view設置如下屬性,即可從view層級關閉硬件加速開關。在這裡只能關閉硬件加速開關,不能打開。這個層面決定權是最高的,可以覆蓋上面三個級別。
[html]
myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 到這裡還是不清楚為什麼只有這個界面的view發生了問題。這個view不是應用覆蓋重寫的,並不復雜。看了下google後面提供的一些高效使用硬件加速開關的技巧:
Reduce the number of views in your application
Avoid overdraw
Don't create render objects in draw methods
Don't modify shapes too often
Don't modify bitmaps too often
後來打開android開發人員選項的檢查是否過度繪制的功能,發現這個界面有很明顯的過度繪制。到這裡基本可以得出,這個界面由於打開硬件加速器高概率出現花屏,應該是違反了第二條:Avoid overdraw。去看了下google的Android Drawing Models說明,還是沒有從根本上弄清楚硬件加速是怎麼一個回事。沒有從代碼上看到這些總是感覺不太清楚,不過對於硬件加速了解到這裡已經足夠解決開發過程中遇到的問題。最後補充說明在分析上述的花屏問題時,發現將.9圖片去掉換成普通資源,該問題也會得到修正。
moto x手機喜歡的人非常的多,這手機的外形與配置都是很不錯的,這手機的續航是大家都非常關心的,那麼這省電模式要
【ROM 介紹】 原汁原味官方界面 HTC SENSE3.6 + 4.04系統 華麗麗的,對剩余APP進行大量優化,提升手機使用效率。釋放大量緩存,親測1周,超穩定無BU
安卓手機擁有著非常龐大的用戶群,用戶們用久了安卓手機會發現,手機會變得很慢,這不是系統配置的問題,而是這手機的垃圾變得非常得多,今天小編要分享的是安卓手機
安卓手機開機很慢,這個問題也是很多用戶不願重啟手機的緣故,那麼要怎麼樣才能給手機加速呢?這是很多用戶都想要知道的,