Web开发

注册

 

发新话题 回复该主题

卡顿优化工具及如何检测Androidap [复制链接]

1#

当用户在使用我们应用的时候,很多问题是很难被及时发现的,比如内存占用高,就容易造成app卡顿现象,一旦发生卡顿就会被用户直观的感受到,所以app卡顿是很影响用户体验的,所以优化一直是我们要考虑的重要部分,正文会介绍几种优化工具。

另外一方面,对于开发者来说,卡顿的问题很难定位,发生问题的原因过于复杂,比如:代码问题、内存问题、绘制问题以及IO操作等等。而且线上发生的卡顿问题在线下我们很难发现,因为这种情况大多与用户用的系统环境有很大的关系,因此我们需要在用户反馈卡顿问题的时候,并记录下用户使用的场景等,这样的过程比较繁琐。要解决这些问题可以借助工具,友盟+u-apm应用性能监控平台这款监测工具,就可以帮助开发者查找和定位app出现问题,解决这些问题从而使用户有个良好的体验感!

优化工具

CPUProfile

目前AndroidStudio自带了CPUProfiler工具,它可以以图形化的形式展示执行的时间、调用栈等信息。收集的信息比较全面,包含了所有线程。但是由于其收集信息全面,导致了运行时内存开销严重,App函数整体运行都会变慢,可能会带偏我们的优化方向。

使用方式:Debug.startMethodTracing();...Debug.stopMethodTracing();最终生成的文件在sd卡:Android/data/packagename/files目录下。

Systrace

Systrace它是轻量级的框架,而且开销小,可以直观反映CPU的利用率而且右侧alter可以针对一些问题给出相关的建议。比如绘制慢或者GC频繁等。

StrictMode

Android2.3引入的一个工具类:严苛模式。是一种运行时检测机制。可以帮助开发人员检测代码当中不规范的问题。StrictMode主要检测线程策略和虚拟机策略。

线程策略包括:

·自定义的耗时调用,detectCustimSlowCalls

·磁盘读取操作,detectDiskReads

·网络操作,detectNetwork

虚拟机策略:

·Activity泄漏,detectActivityLeaks

·Sqlite对象泄漏,detectLeakedSqlLiteObjects

·检测实例数量,setClassInstanceLimit

我们在Application中使用:

StrictMode本身也是耗性能的,所以我们只在debug模式下开启。当出现不符合检测策略的时候就会在控制台打印日志,输入StrictMode关键词过滤即可。

自动化检测卡顿方法

CPUProfiler和Systrace都是适合线下使用的,无法带到线上。那我们如何做到线上监测卡顿呢?

我们都知道一个进程中只有个Looper对象,我们通过查看Looper源码发现,在其loop方法中的死循环中有个mLogging对象,在执行的时候打印了一个Dispatchingto日志,执行完成的时候有打印了一个Finishedto日志。如:

所以我们可以自定义Printer对象,让Handler的日志都通过我们自定义的Printer进行打印,然后收集日志信息,匹配Dispatchingto和Finishedto字段,如果在设定的某个时间内只有Dispatchingto字段而没有Finishedto字段,那么就说明发生了卡顿。发生卡顿后我们就收集此时的调用栈信息。相反如果两个字段都存在则说明应用运行的很流畅。

字段Printer设置给mLogging对象:

代码中的log字段就是我们需要的Dispatch和Finished字段,我们监测这两个字段并收集调用栈信息将其发送到后端进行分析使用。

那么这里其实还存在一个问题就是可能我们收集的信息不够准确,为什么呢?就是我们收集的调用栈信息是最后收集的,那么这个时候可能针对卡顿的问题已经执行完成了。

友盟U-APM性能检测工具

以上介绍的卡顿检测的方法并不完美,那么有没有一款工具能实时检测App卡顿问题呢?答案是有的。这里介绍一款带有卡顿检测和分析功能的工具-友盟U-APM性能检测工具,它的卡顿分析功能可以实时检测卡顿发生代码位置、卡顿的发生时间及卡顿次数等等,还可以进行告警设置,通过钉钉或者邮件的方式在第一时间把问题反馈给开发人员,再也不用担心找不到问题代码的位置了。

另外,友盟+搭载在U-APM应用性能监控平台上推出了友盟+云真机服务,为移动开发者提供了灵活地测试操作界面,支持ADB调试、WEB远程调试、扫码、抓包、虚拟定位等测试功能,并提供了测试报告供开发者后续查看。提供了海量Android、iOS真机,通过资源集中管理,合理调度分配,为开发者提供发版前测试、发现线上问题后复现等场景使用,助力开发者平衡成本与需求,提升研发效率。

作为开发人员,在平时的开发中要养成良好的代码习惯,写完代码后也可以先使用友盟U-APM这款工具进行监测,毕竟以防万一嘛~开发者提前监测到问题,比如:卡顿、内存、app崩溃、闪退等等,在借助友盟这款工具针对监测出的问题去解决,总要比用户使用后一系列的吐槽强,这样也不至于降低用户的体验感!

分享 转发
TOP
发新话题 回复该主题