Android性能优化-----代码(Android)

一、硬件加速

从Android 3.0开始就支持硬件加速,使得绘制View的时候更加平滑。我们经常会使用会在Application级别或者在Activity级别中开启硬件加速,希望获取到更好的操作体验。。
默认是关闭的,可以在Application,Activity,Window,View这四个级别中开启:
1)Application:在Manifest中application标签指定android:hardwareAccelerated="true"
2)Activity:在Manifest中activity标签指定android:hardwareAccelerated="true"
3)Window:getWindow().setFlags( WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); 
4)View:mView.setLayerType(View.LAYER_TYPE_HARDWARE, null); 
然而Android对硬件加速的支持并非完美,有些绘制操作在开启硬件加速的情况下不能正常工作:
1)UI控件显示异常或者闪动
    解决方案:某个View的硬件加速属性mView.setLayerType(View.LAYER_TYPE_SOFTWARE, null)
2)EditText中文字的重叠:
    解决方案:android:layerType=”software”
3)WebView加载异常
    解决方案:首先判断是否支持webview.defauleHardwareAccelerated()
    WebView使用硬件对加载效率还有很大提升的,所以建议在onPageStart()中使用mView.setLayerType(View.LAYER_TYPE_HARDWARE, null);而在onPageFinish()回调中使用mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null)。
4)大图片无法显示
    解决方案:有的时候会需要加载大图,但是硬件加速中OpenGL对于内存是有限制的。如果遇到了这个限制,LogCat只会报一个Warning: Bitmap too large to be uploaded into a texture 
    Activity或者View关闭硬件加速即可

二、View中设置缓存

View中设置缓存属性setDrawingCacheEnable
在图片或者view的缩放中,可能很卡,使用缓存就好很多
RecycView的动画背景里,可能背景错乱等


三、防止卡顿

启动优化、优化你的布局(layoutopt),采用ViewStub动态加载View、用<merge>优化布局层数、防止过度绘制等,已经在《Android性能优化-----卡顿、crash》里分析过了

四、针对ListView的性能优化

ListView中item尽可能的减少使用的控件和布局的层次;背景色与cacheColorHint设置相同颜色;
ListView中item的布局至关重要,必 须尽可能的减少使用的控件,布局。
RelativeLayout是绝对的利器,通过它可以减少布局的层次。
同时要尽可能的复用控件,这样可以减少 ListView的内存使用,减少滑动时GC次数。
ListView的背景色与cacheColorHint设置相同颜色,可以提高滑动时的渲染性能。 
ListView中getView是性能是关键,这里要尽可能的优化。
getView方法中要重用view;getView方法中不能做复杂的逻辑计算, 特别是数据库操作,否则会严重影响滑动时的性能。

猜你喜欢

转载自blog.csdn.net/pangjl1982/article/details/85916405