Android性能优化(三):响应优化
程序员文章站
2022-06-22 08:46:48
Android性能优化(三):响应优化1、为什么要进行响应优化?我在[布局优化]的文章中说过,Android系统每隔16ms会发出一个VSYNC信号来触发UI的渲染,如果在16ms内不能完成UI的渲染,界面就出现卡顿的情况。页面如果5秒钟之内无法响应屏幕触摸事件或者键盘输入事件就会出现ANR,而BroadcastReceiver如果10秒钟之内还未执行完操作也会出现ANR。为了避免ANR,我们需要进行响应速度的优化。(https://blog.csdn.net/weixin_42574892/artic...
Android性能优化(三):响应优化
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?
- 避免主线程堵塞:开辟单独的子线程来处理耗时阻塞事务。
- 避免CPU满负荷, I/O阻塞:文件读写或数据库操作不要在主线程中执行, 通过开辟子线程的方式异步执行。
- 避免内存泄漏导致ANR:内存泄漏会导致手机内存不足,造成ANR。
- 避免频繁的GC:频繁GC有两个原因:1、内存抖动, 即大量的对象被创建又在短时间内马上被释放.2、瞬间产生大量的对象会严重占用内存区域。
4、如何检测应用主线程卡顿?
检测工具:BlockCanary
-
BlockCanary是一个非侵入式式的性能监控函数库,用来监控应用主线程的卡顿。
-
它的基本原理是利用主线程的消息队列处理机制,通过对比消息分发开始和结束的时间点来判断是否超过设定的时间,如果是,则判断为主线程卡顿。
接入方法:
- 在build.gradle中添加依赖;
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
上一篇: Dart 2.5 正式公布
下一篇: 词条国际化开发规范Demo