如何在Android项目中优化卡顿

  介绍

如何在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项目中优化卡顿问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

如何在Android项目中优化卡顿