美文网首页Android 优化实践系列文章
使用Hugo和TraceView优化界面卡顿的一个简单实践

使用Hugo和TraceView优化界面卡顿的一个简单实践

作者: ahking17 | 来源:发表于2017-11-21 16:38 被阅读79次
背景

产品反馈在天气的小时趋势图中, 左右滑动非常的卡顿. 在我的sony低版本手机上, 确实发现卡顿的比较严重, 因此需要优化一下, 看看UI线程的耗时操作的具体位置.

使用Hugo初步定位

WeatherHourlyTrendsView.java

    @Override
    @DebugLog
    protected void onDraw(Canvas canvas) {
        final DataSet dataSet = mDataSet;
        final int size;

        if (dataSet == null || (size = dataSet.size()) == 0)
            return;

Log打印结果:

hugo_1.png

可以看到, onDraw()方法执行了324ms, 显然这里存在很大的问题.

使用TraceView具体分析

先把@DebugLog注释去掉, 否则抓取的trace文件没有可读性.

直接使用DDMS中的start method profiling和stop method profiling 抓取到.trace文件.
在Find输入框, 输入 "WeatherHourlyTrendsView" 找到onDraw()方法.

traceview_1.png

可以看到onDraw()的执行内部, JLog.i()方法的耗时占据了64.8%. 其实就是简单的Log打印造成了UI卡顿的最重要的原因.

使用Hugo初步确认优化结果

去掉JLog.i()调用后, 再次看hugo的输出.


hugo_2.png

现在onDraw()方法执行了66ms, 可见优化结果还是非常理想的.

再次用TraceView分析
traceview_2.png

可见, 优化后, 现在onDraw()方法中最耗时的操作在getWeatherIcon()中.

    public Bitmap getWeatherIcon(int position) {
        int weatherCode = Integer.valueOf(data.get(position).getWeathercode());
        int resId = WeatherCommon.getIconByWeatherCode(weatherCode);
        Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), resId);
        return bitmap;
    }

这里也是一个比较明显的可优化点. 现在每次都new 一个Bitmap对象出来, 显然是不合理的, 应该用一个LruCache对这些Bitmap对象进行统一的管理, 避免每次都new对象出来用.

-------DONE.------

相关文章

  • 使用Hugo和TraceView优化界面卡顿的一个简单实践

    背景 产品反馈在天气的小时趋势图中, 左右滑动非常的卡顿. 在我的sony低版本手机上, 确实发现卡顿的比较严重,...

  • Android性能优化(traceView)

    一、性能优化的目的:减少卡顿 二、性能优化工具:TraceView TraceView是android SDK自带...

  • iOS - 界面优化

    APP的界面优化 什么样的界面让你觉得需要被优化呢?就是界面会卡顿咯。 下面介绍 卡顿原理 卡顿检测 实战 1、界...

  • iOS 底层原理:界面优化

    界面优化无非就是解决卡顿问,优化界面流畅度,以下就通过先分析卡顿的原因,然后再介绍具体的优化方案,来分析如何做界面...

  • iOS 底层原理:界面优化

    界面优化无非就是解决卡顿问,优化界面流畅度,以下就通过先分析卡顿的原因,然后再介绍具体的优化方案,来分析如何做界面...

  • iOS界面优化

    界面优化 本文主要介绍界面卡顿的原理以及优化 界面卡顿 通常来说,计算机中的显示过程是下面这样的,通过CPU、GP...

  • 21-性能优化

    一、CPU和GPU 二、卡顿产生的原因和优化 卡顿优化-CPU 卡顿优化-GPU 卡顿监测 监控卡顿的demo:推...

  • 界面卡顿优化

    1.除了UI部分,所有的加载操作都在后台完成。 1.1 文本计算 如果一个界面中包含大量文本,文本的宽高计算会占用...

  • 界面优化解析

    前言 我们经常在面试中,会被问及关于界面优化相关的问题,比如为什么界面会出现卡顿?如何监控卡顿?接着如何解决卡顿?...

  • 使用TraceView找到卡顿的元凶以及StrictMode优化

    读完本文你将了解到:1.TraceView 是什么;2.如何生存trace文件;3.根据TraceView显示定位...

网友评论

    本文标题:使用Hugo和TraceView优化界面卡顿的一个简单实践

    本文链接:https://www.haomeiwen.com/subject/cgywvxtx.html