如何在Android项目中优化卡顿?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
<强>卡顿原因强>
<>强过于复杂的布局强>
- <李>
界面性能取决于UI的渲染性能,UI渲染的整个过程由CPU和GPU两个部分协同完成.CPU负责UI布局元素的测量、布局、画等相关运算执行,GPU负责栅格化(光栅化),将UI元素绘制到屏幕上。
李> <李>如果UI布局层次太深,或是自定义控件的> <李>
UI线程的复杂运算会造成UI无响应,导致ANR,但更多的是造成UI响应停滞卡顿,一定是卡顿的极致。
李><强>频繁的GC 强>
<>强优化方法强>
1,减少刷新次数
比如进度更新,要进度有变化再去刷新,且保证频率不得高于系统的刷新频率。
2,避免非必要的刷新
若控件不可见,则无需刷新。
3,避免后台线程影响
如列表控件,在滑动时不要去加载图片,可以在滑动监听里停止图片的加载。
4局部刷新
如RecyclerView的DiffUtil。自定义视图可以使用下面两个方法:
无效(Rect 脏); 无效(int 左,int ,, int ,, int 底部);
5,尽量使用属性动画,它减少了自身的重绘。最后要清除
StringBuilder,列表等在创建时传入一个合适的参数指定初始容量,以避免频繁扩容的开销。
6,开启硬件加速
7,原理可见Android硬件加速原理与实现简介,理解Android硬件加速原理的小白文
应用程序级别
& lt; application Android: hardwareAccelerated=皌rue",/在
活动级别
& lt; activity Android: hardwareAccelerated=皌rue",/在
窗口级别
getWindow () .setFlags (WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
视图级别
//,如果是,软件会将,View 绘制到一个,位图,//,然后依然是通过硬件加速将,Bitmap 绘制到,画布 view.setLayerType (View.LAYER_TYPE_SOFTWARE, null);
- <李>
LAYER_TYPE_NONE:普通渲染方式,不会返回一个离屏的缓冲,默认值。
李> <李>LAYER_TYPE_HARDWARE:如果这个应用使用了硬件加速,这个视图将会在硬件中渲染为硬件纹理,如果应用程序并没有被硬件加速,则其效果和LAYER_TYPE_SOFTWARE相同。
李> <李>LAYER_TYPE_SOFTWARE:此视图通过软件渲染为一个位图。
李>检查是否开启了硬件加速
view.isHardware-Accelerated (); Canvas.isHardwareAccelerated ();
如果视图中要处理中文长文本,需要关闭硬件加速。因为每个中文编码不一样,缓存效果不理想。
<强>监控强>
- <李>
《Android应用性能优化最佳实践》2.8章,主要利用MainLooper里的打印机。
李> <李>BlockCanary开源库
李> <李>StrctMode
李><强> ANR 强>
活动的观点:5秒无响应
BroadcastReceiver: 10秒无响应
服务:20秒无响应
ANR时,系统会生成一个痕迹。txt的文件放在/数据/一定/下。通过亚行命令将其导出到本地
adb 美元;pull 数据/一定/traces.txt ~/Desktop
关于如何在Android项目中优化卡顿问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。