范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

一文揭秘如何使用卡顿检测工具BlockCanary

  前言
  在日常业务测试中经常会发现页面跳转卡顿、滑动卡顿等卡顿问题,但是我们发现卡顿问题,有时候反馈给开发不一定得到很好的解决,因为开发需要看日志,而每次如果都去抓log,就会显得麻烦,而且需要搜索。会非常麻烦,如何解决了,成为老大难的问题了。
  本文介绍如何使用BlockCanary测试app卡顿并且做到log日志上报.
  BlockCanary介绍
  BlockCanary是一个Android平台的一个非侵入式的性能监控组件,应用只需要实现一个抽象类,提供一些该组件需要的上下文环境,就可以在平时使用应用的时候检测主线程上的各种卡慢问题,并通过组件提供的各种信息分析出原因并进行修复
  原理:
  使用教程
  app目录的build . gradle 中 , 增加如下代码  implementation "com.github.markzhai:blockcanary-android:1.5.0"
  如何使用
  一般是在Application中的onCreate中注册 ,  BlockCanary.install(this,new AppBlockCanaryContext()).start();
  这里的AppBlockCanaryContext是继承了BlockCanaryContext   重写了里面的几个方法,具体代码如下: package com.example.studayapp;   import android.content.Context;   import com.github.moduth.blockcanary.BlockCanaryContext; import com.github.moduth.blockcanary.internal.BlockInfo;   import java.io.File; import java.util.LinkedList; import java.util.List;   /**  * @Description  * @auther VTester  * @create 2020-10-11 10:08  */ public class AppBlockCanaryContext extends BlockCanaryContext {     public String provideQualifier() {         //获取应用版本信息         return "unknown";     }       /**      * Implement in your project.      *      * @return user id      */     public String provideUid() {         //获取用户uid         return "uid";     }       /**      * Network type      *      * @return {@link String} like 2G, 3G, 4G, wifi, etc.      */     public String provideNetworkType() {         //获取网络类型         return "unknown";     }       /**      * Config monitor duration, after this time BlockCanary will stop, use      * with {@code BlockCanary}"s isMonitorDurationEnd      *      * @return monitor last duration (in hour)      */     public int provideMonitorDuration() {         //设置监控时长         return -1;     }       /**      * Config block threshold (in millis), dispatch over this duration is regarded as a BLOCK. You may set it      * from performance of device.      *      * @return threshold in mills      */     public int provideBlockThreshold() {         //设置监控卡顿阀值         return 1000;     }       /**      * Thread stack dump interval, use when block happens, BlockCanary will dump on main thread      * stack according to current sample cycle.      * 

* Because the implementation mechanism of Looper, real dump interval would be longer than * the period specified here (especially when cpu is busier). * * * @return dump interval (in millis) */ public int provideDumpInterval() { return provideBlockThreshold(); } /** * Path to save log, like "/blockcanary/", will save to sdcard if can. * * @return path of log files */ public String providePath() { //设置log保存地址 return "/blockcanary/"; } /** * If need notification to notice block. * * @return true if need, else if not need. */ public boolean displayNotification() { //设置是否在桌面展示, return false; } /** * Implement in your project, bundle files into a zip file. * * @param src files before compress * @param dest files compressed * @return true if compression is successful */ public boolean zip(File[] src, File dest) { return false; } /** * Implement in your project, bundled log files. * * @param zippedFile zipped file */ public void upload(File zippedFile) { throw new UnsupportedOperationException(); } /** * Packages that developer concern, by default it uses process name, * put high priority one in pre-order. * * @return null if simply concern only package with process name. */ public List concernPackages() { return null; } /** * Filter stack without any in concern package, used with @{code concernPackages}. * * @return true if filter, false it not. */ public boolean filterNonConcernStack() { return false; } /** * Provide white list, entry in white list will not be shown in ui list. * * @return return null if you don"t need white-list filter. */ public List provideWhiteList() { LinkedList whiteList = new LinkedList<>(); whiteList.add("org.chromium"); return whiteList; } /** * Whether to delete files whose stack is in white list, used with white-list. * * @return true if delete, false it not. */ public boolean deleteFilesInWhiteList() { return true; } /** * Block interceptor, developer may provide their own actions. */ public void onBlock(Context context, BlockInfo blockInfo) { } }   需要在项目的配置权限   根据上面的配置代码并打包app,进行手工测试,如果主线程卡顿超过1000ms,会产生卡顿日志。   在我们执行中,日志的位置   遇到卡顿就会将日志记录   我们看下日志的详细的信息   卡顿文件包含几点:   发生时间   版本   imei   cpu型号   内存   卡顿堆栈   这是我们的日志的文件,这样是存储在手机里,我们还可以实现一个上传功能,去上传我们的发现的日志。


邀您共赏第三届全国钢琴教学研讨会钢琴重奏音乐会2018年11月24日1900,在云南师范大学音乐舞蹈学院举办的第三届全国钢琴教学研讨会迎来了一项重要的活动由来自上海音乐学院的叠艺重奏组和来自中国音乐学院的羽重奏组带来的钢琴重奏PRS代言人RickySkaggs成为乡村音乐名人堂成员坐拥12首1歌曲,15座格莱美奖得主,12座IBAM奖,9座ACM奖,8座CMA奖,乡村乐传奇人物RickySkaggs正式成为CountryMusicHallofFame乡村音乐官宣音乐人陈亮为新晋马丁琴弦中国地区推广大使2018年10月1日,马丁全新AuthenticAcoustic琴弦全球上市2018年10月10日,马丁全新AuthenticAcoustic琴弦全国上市发布会,在上海乐展召开,品SAUTER助力天津市第三届钢琴大赛,成就万千音乐梦想2019年6月2日,由天津市音乐家协会及天津市钢琴专业委员会主办的天津市第三届钢琴大赛正式揭开帷幕。此次大赛旨在于表达天津音乐界的师生们对新中国成立70周年的赤诚之心,并通过此次钢论一把MARTIN吉他是如何制成的每一把Martin吉他都蕴含了匠人们的智慧和心血,在Martin吉他发展的历史长河中,Martin匠人们总结了自己认为最科学的制琴方法,运用机器和匠人们的手工经验使得每一把Mart夜空中最闪亮的星Martin限量星座特别系列吉他2017年Martin公司为中国制作了12款特别限量星座系列吉他,这个系列的吉他都以浩瀚宇宙中的星座为主题,由MartinCustom团队亲自研发设计,每一把星座系列吉他都对应一个入门级电箱琴推荐马丁GPCX1RAE吉他马丁GPCX1RAE吉他,西塔云杉面板,HPL玫瑰木背侧板,身材比D型要小一些,腰身曲线较大,抱着舒服,是一款适合指弹的入门级马丁电箱琴,也适用于各个级别的吉他手演奏。该型号是马丁便宜也有好货!5。98万起的宝骏RC5,能跑又能装,适合工薪族都说便宜没好货,但在民族品牌的冲击之下,已经开始内卷的汽车领域里,小编其实并不认同这句话。因为哈弗H6理想ONE的相继热销,说明了低价高质的精品车也有不少。即便将视线转到10万以内传统琴型与现代旅行琴型的完美融合MartinJunior系列38寸的MartinJunior系列的DJR。吉他一直是业界旅行吉他类产品的代表之一,其制作的工艺继承了Martin一直的创新与严谨的公司理念,此款吉他采用西提卡云杉材料面板和沙比什么车能助力完成创业梦想?盘点载人载物领域性价比极高的车你有关于创业的梦想吗?上周我回了母校拍素材,遇见了几个大三的学弟正巧也认识我,他们跟我谈了有关创业的想法,而且是关于车的,所以问了正在汽车媒体圈摸爬滚打的我有没有什么创业好车推荐。SigmaSE系列介绍SigmaGuitar从1970年创立至今,历经47个年头,逐步发展成为一个复古与创新兼具,备受推崇的成熟品牌,使用者范围涵盖了从跃跃欲试的初学者一直到经验丰富的职业乐手。2015
曝华为nova10将于6月上市5G1亿像素2699起售按照惯例,华为nova系列的新品会在上半年发布,可是自从华为受到打压以来,华为手机新品的发布节奏受到严重的影响,去年华为nova9延迟了半年时间才发布,而目前华为也还未透露nova股票怎样才能T十0交易?谢邀请。在我看来股票的T0交易,你必须具备这样的一个前提条件买入后最大程度的就能够实现盈利,也即是你的短线交易的胜率要超过60,买入后就能脱离成本价,赚钱最差也能保证不会亏损,或者vivoX80或将于4月初发布,搭载天玑900080W快充,堆料很足vivo手机这几年在行业内的评价非常不错,可以说这是一个在坚持做自己的国产手机厂商,在华为手机业务被限制之后,没有了市场竞争力,友商都在开始机海战术,几乎每个阶段都有新品发布,抢占热闹了!中国电信也要玩AIM消息,5G消息摆哪儿?新5G消息从中国电信官网获悉,3月18日,信元公众信息发展有限责任公司发布5G消息回落解决方案服务商招募资格预审公告,招募5G消息的回落解决方案为AIM类消息的产品研发工作,招募相雷军用了11次的PPT动画,红米K50最新发布会还在用!我手把手教你前两天红米召开了春季发布会,作为一个忠实米粉,这我怎么能不看呢?于是,今天上班的第一件事,就是花了快两个小时去把发布会看了一遍!其实,昨天朋友跟我说红米K50发布的时候,我还感觉无在杭一高校获世界互联网大会志愿服务突出贡献集体等荣誉近日,国家网信办浙江省政府对2021年世界互联网大会中作出突出贡献的集合和个人予以通报表扬。浙江外国语学院团委荣获2021年世界互联网大会乌镇峰会志愿服务突出贡献集体荣誉称号。同时Python内存驻留机制字符串驻留机制在许多面向对象编程语言中都支持,比如JavapythonRubyPHP等,它是一种数据缓存机制,对不可变数据类型使用同一个内存地址,有效的节省了空间,本文主要介绍Py国家计算机病毒应急处理中心披露美国安局网络间谍木马1国家计算机病毒应急处理中心披露美国安局网络间谍木马!近日,国家计算机病毒应急处理中心对名为NOPEN的木马工具进行了攻击场景复现和技术分析。该木马工具针对UnixLinux平台,新能源汽车家用220v为什么充不上电新能源汽车家用220v充不上电是因为插座没有接地线的原因。北汽新能源充电宝必须接有地线保护的插座才能给汽车充电。只要给家用插座接地线就可以正常充电了。实际上,新能源电动汽车在家就可iOS15。4耗电严重?两种方式教你改善耗电,顺便看看大家的体验iOS15。4作为ios15中最重要的一次更新,自发布之后就备受关注,因为这次苹果带来了一项重磅更新戴口罩识别faceID功能。目前这个版本已经发布了几天了,但是看到不少人都说这个红米100寸MAX会对98寸及以上尺寸的市场带来什么样的影响第一红米100寸的配置高不高,我说高但是还不够!首先亮度只是700尼特虽然可以达到800尼特的峰值亮度,但是海信E7GPRO是1000尼特,更高一档的U7GPRO98寸达到1600