Android BlockCanary

BlockCanary是Android平台一个非侵入式的性能监控组件,用于检测主线程的卡慢问题。它通过监听主线程Looper的dispatchMessage耗时,当超过预设阈值时记录堆栈信息,帮助开发者分析和定位问题。使用简单,只需添加依赖并在Application中初始化。其原理是通过设置主线程Looper的监控,统计执行时间,超过阈值时触发dump,记录CPU和堆栈信息。
摘要由CSDN通过智能技术生成

1.BlockCanary

造成app卡顿的直接原因通常是,主线程执行繁重的UI绘制、大量的计算或IO等耗时操作。常用的解决卡顿的方法有BlockCanary、ArgusAPM、LogMonitor等。

从监控主线程哦哦实现原理上,主要分为两种:

①依赖主线程Looper,监控每次dispatchMessage的执行耗时。(BlockCanary)

②依赖Choreographer模块,监控相邻两次Vsync事件通知的时间差。(ArgusAPM、LogMonitor)

BlockCanary是Android平台的一个非侵入式的性能监控组件,应用只需要实现一个抽象类,提供一些该组件需要的上下文环境,就可以在平时使用应用的时候检测主线程上的各种卡慢问题,并通过组件提供的各种信息分析出原因并进行修复。

BlockCanary对主线程操作进行了完全透明的监控,并能输出有效的信息,帮助开发分析、定位到问题所在,迅速优化应用。其特点有:

①非侵入式,简单的两行就打开监控,不需要到处打点,破坏代码优雅性。

②精准,输出的信息可以帮助定位到问题所在(精确到行),不需要像Logcat一样,慢慢去找。

 

2.BlockCanary使用

①添加依赖

dependencies {

    compile 'com.github.markzhai:blockcanary-android:1.5.0'

    // 仅在debug包启用BlockCanary进行卡顿监控和提示的话,可以这么用

    debugCompile 'com.github.markzhai:blockcanary-android:1.5.0'

    releaseCompile 'com.github.markzhai:blockcanary-no-op:1.5.0'

}

②在Application里进行初始化和start

 BlockCanary.install(this, new BlockCanaryContext()).start();

 

3.BlockCanary原理

首先看install方法:

public static BlockCanary install(Context context, BlockCanaryContext blockCanarayContext) {

    BlockCanaryContext.init(context, blockCanaryContext);

    setEnabled(context, DisplayActivity.class, BlockCanaryContext.get().displayNotification());

    return get();

}

其中BlockCanaryContext表示监测的某些参数,包括卡顿的阈值、输出文件的路径等等。

public class BlockCanaryContext implements BlockInterceptor {

    public int provideBlockThreshold() {

        return 1000;   //默认卡顿阈值为1000ms

    }

    public String providePath() {

        return "/blockcanary/";//输出的log

    }

    //支持文件上传

    public void upload(File zippedFile) {

        throw new UnsupportedOperationException();

    }<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值