App体系化优化之启动优化(二工具的使用)

概述

TraceView是Android平台配备一个很好的性能分析工具,它可以通过图形化的方式让我们了解我们要跟踪的程序的性能,并且能具体到方法。关于它的介绍,配置,使用相信网上有大篇幅的文章介绍,我就不赘言了。

既然是启动的优化 那么我们就直接对启动的部分进行性能的检测

第一步:在Application中埋点,指定输出xx.trace文件

 @Override
    public void onCreate() {
        super.onCreate();
        Debug.startMethodTracing("App");
        QMUISwipeBackActivityManager.init(this);
        initX5();
        mInstance = this;
        mContext = getApplicationContext();
        mMainThread = Thread.currentThread();
        mMainThreadId = android.os.Process.myTid();
        mHandler = new Handler();
        RePlugin.App.onCreate();
        RePlugin.enableDebugger(this, true);
        RxTool.init(this);
        if (isDebug(this)) {
            ARouter.openLog();
            ARouter.openDebug();
        }
        ARouter.init(this);
        UMConfigure.init(this, "xxxx", "Umeng", UMConfigure.DEVICE_TYPE_PHONE, "xxxx");
        /**
         * 参数: boolean 默认为false,如需查看LOG设置为true
         */
        UMConfigure.setLogEnabled(true);
        /**
         * 参数:boolean 默认为false(不加密)
         */
        UMConfigure.setEncryptEnabled(true);
        UMShareAPI.get(this);
        UMengPushManager.getInstance().initUmPush();

        //地图初始化,解决第一次进采集界面没有定位数据
        LocationCityManager locationCityManager = new LocationCityManager(this);
        locationCityManager.initLocation();

        //未知异常捕获,日志记录 邮件通知研发人员
//        UniException.getInstance().init();

        //initDB
        LitePal.initialize(this);

        //初始化录音工具
        IdealRecorder.getInstance().init(this);
        Debug.startMethodTracing();
    }

在onCreat方法启动的时候调用

Debug.startMethodTracing("App"); 指定在sdcard/Android/data/包名/file/App.trace  文件的生成

在启动结束的时候关闭

Debug.startMethodTracing();

启动app后在Device File Explore 视图找到App.trace文件,然后点击开就可以看到

 

这里可以看出App启动过程有36个线程(Call Chart)黄色代表系统线程  绿色app自带的线程  蓝色代表java执行的线程

根据这些线程的消耗CPU的情况,代码执行的耗时,已经函数的调用和被调用情况,我们可以分析出启动慢,卡顿等的耗时原因,已经优化方向。

接下来我们区分两个指标:cputime和walltime

很多人会认为walltime代码执行时间就是用来考量性能决定优化方向的指标,其实不然,我认为cputime才是真正的衡量指标,cputime代码消耗cpu的时间即cpu占用时间。

原因:假设优先调用一个函数出现了死锁的情况,函数由于死锁无法分配到cpu而处于等待的状态,这个时候函数的walltime就会变得特别长,但是cputime却是非常短,因为函数A非常简单,甚至乎不怎么消耗cpu。

假设我们发现启动速度过慢,但是cpu的使用率又非常低,每一个线程占用cpu的时间很短的时候,这个时候我们就可以考虑开辟多线程来解决问题。

缺点

traceView的缺点就是即使我们在主线程埋点,但是它依然会捕获所有的线程,因此会使得app的速度变慢,对性能消耗非差大,反而产生误导,将优化的方向偏离。

其他工具:systrace

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值