App启动优化(三)启动时间优化

前言

1.App启动优化 - 启动原理
2.App启动优化 - 黑白屏

概述

app启动时间优化指的是Application中的onCreate(),运行到Activity的onCreate(),中的运行时间优化。
这个过程中时间过长的话,可能存在几个问题:
1.点击图标很久不响应。
2.首页显示太慢。

发现问题-查看启动时间

AndroidStudio 4.4以前:

adb shell am start -W -n 包名/包名.activity.MainActivity

ThisTime:最后一个启动的Activity的启动耗时;
TotalTime:自己的所有Activity的启动耗时;
WaitTime: ActivityManagerService启动App的Activity时的总时间(包括当前Activity的onPause()和自己Activity的启动)。

AndroidStudio 4.4以后
Logcat 输入Display筛选系统日志 不过滤信息No Filters

定位问题-查看Application中onCreate()中的所有方法的具体运行时间

1.Debug.startMethodTracing(filePath);
中间为需要统计执行时间的代码
Debug.stopMethodTracing();

2.adb pull /storage/emulated/0/app1.trace把文件拉出来分析
把pull到电脑上的文件拖到AS中就可以分析了

解决问题-优化方案

1.开线程

1.里面的API不能去创建handler
2.不能有UI操作
3.对异步要求不高的

2.懒加载

用的时候再初始化,如网络、数据库操作

@Override
    public void onCreate() {
        super.onCreate();
        File file = new File(Environment.getExternalStorageDirectory(), "app1.trace");
        Log.i(TAG, "onCreate: " + file.getAbsolutePath());
        //把分析结果存在一个文件
        Debug.startMethodTracing(file.getAbsolutePath());
        //对全局属性赋值
        mContext = getApplicationContext();
        mMainThread = Thread.currentThread();
        mMainThreadId = android.os.Process.myTid();
        mMainLooper = getMainLooper();
        mHandler = new Handler();
        //因为LQRUIKit中已经对ImageLoader进行过初始化了
//        initImageLoader(getApplicationContext());
        new Thread(){
            @Override
            public void run() {
                //如果要用线程来节约了这些初始化的时间
                //1.里面的API不能去创建handler
                //2.不能有UI操作
                //3.对异步要求不高
                initNim();
                initImagePicker();
                initOkHttp();//可以懒加载
            }
        }.start();
        Debug.stopMethodTracing();
    }

你可能感兴趣的:(App启动优化(三)启动时间优化)