1、为什么要进行响应优化?
我在布局优化的文章中说过,Android系统每隔16ms会发出一个VSYNC信号来触发UI的渲染,如果在16ms内不能完成UI的渲染,界面就出现卡顿的情况。
(1)页面如果5秒钟之内无法响应屏幕触摸事件或者键盘输入事件就会出现ANR;
(2)BroadcastReceiver如果10秒钟之内还未执行完操作也会出现ANR;
(3)主线程在执行Service的各个生命周期函数时20秒内没有执行完毕。
为了避免ANR,我们需要进行响应速度的优化。
2、如何查找ANR产生的原因?
当出现ANR时,系统会手机/data/anr/目录下生成traces.txt文件,我们可以使用adb命令将traces.txt文件取出来分析;
adb pull data/anr/traces.txt D:\log
通过AS开发工具也可以看到,如图:
3、如何避免ANR?
4、如何检测应用主线程卡顿?
检测工具:BlockCanary
BlockCanary是一个非侵入式式的性能监控函数库,用来监控应用主线程的卡顿。
它的基本原理是利用主线程的消息队列处理机制,通过对比消息分发开始和结束的时间点来判断是否超过设定的时间,如果是,则判断为主线程卡顿。
接入方法:
implementation 'com.github.markzhai:blockcanary-android:1.5.0'
2.在application中进行安装初始化;
BlockCanary.install(this,new BlockContext()).start();
3.创建BlockContext类继承BlockCanaryContext;
import com.github.moduth.blockcanary.BlockCanaryContext;
public class BlockContext extends BlockCanaryContext {
/**
* Implement in your project.
*
* @return Qualifier which can specify this installation, like version + flavor.
*/
@Override
public String provideQualifier() {
return "unknow";
}
/**
* @return 用户ID
*/
@Override
public String provideUid() {
return "uid";
}
/**
* 网络类型
* @return {@link String} like 2G, 3G, 4G, wifi, etc.
*/
public String provideNetworkType() {
return "unknown";
}
/**
* 日志保存路径
* @return
*/
@Override
public String providePath() {
return "/Block/";
}
}
在这里已经表示完成了。
本文地址:https://blog.csdn.net/weixin_42574892/article/details/106692594
如对本文有疑问, 点击进行留言回复!!
Github:07---git之(git的回溯(git reset)、合并冲突、修改提交信息、压缩历史(git rebase))
Pytorch 结合Sobel滤波的卷积操作来提取图像的轮廓图!
让Sublime Text3 支持 Markdown 且可以实时预览
荐 2020最全前端面试系列(浏览器原理)(最容易忽视的面试隐藏大杀器)
网友评论