part01_android应用启动速度优化

作者: IT魔幻师 | 来源:发表于2018-03-20 12:02 被阅读113次

    一、查看启动速度

    在启动应用的时候查看AndroidStudio的日志,过虑框中输入:Display就可以看到启动时间

    如果是在比较老的机器上(4.4以下)使用命令行

        //adb shell am start -W 包名/要启动的activity全类名
        adb shell am start -W com.taiyao.tyle/com.taiyao.tyle.activity.SplashActivity
    

    关于ThisTime/TotalTime/WaitTime的区别可以参考博客:http://androidperformance.com/2015/12/31/How-to-calculation-android-app-lunch-time.html

    二、APP启动流程

    应用启动执行顺序:开辟内存,启动系统服务执行ActivityThread线程创建Application-->执行Application的Oncreat方法-->执行MainActivity的oncreate方法-->加载layout_main.xml-->显示第一帧画面

    三、启动黑白屏优化

    • 1.将window背景的图片替换成自己设置的图片,虽然不能提升速度,但是可以提升一部分用户体验,不至于让用户看到启动时黑屏或者白屏。缺点:这样使用会使得其它界面都会出现这个背景

        <style name="AppTheme" parent="Theme.AppCompat.Light">
            <item name="windowBackground">@drawable/bg</item>
        </style>
      
    • 2.将window设置成透明的,用户也看不到黑白屏的出现,缺点:点击启动图标后会有短暂的延迟。

        <style name="AppTheme" parent="Theme.AppCompat.Light">
            <item name="android:windowIsTranslucent">true</item>
        </style>
      
    • 3.单独给SplashActivity设置一个主题,启动完成后将主题还原

    1> 定义样式

        <style name="AppTheme.Launcher">
            <item name="android:windowBackground">@drawable/bg</item>
        </style>
    

    2> 引入样式

        <activity
            android:name=".activity.SplashActivity"
            android:screenOrientation="portrait"
            android:theme="@style/AppTheme.Launcher"
            >
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    

    3> 在SplashActivity的onCreate方法中设置回原来的样式

         @Override
            protected void onCreate(Bundle savedInstanceState) {
                setTheme(R.style.AppTheme);
                super.onCreate(savedInstanceState);
            }
    

    四、使用Debug类查看代码耗时

        //trace文件保存路径
        File file = new File(Environment.getExternalStorageDirectory(), "appDebug");
        //开始计时
        Debug.startMethodTracing(file.getAbsolutePath());
    
            ...(此处省略N行代码)
    
        //停止计时
        Debug.stopMethodTracing();//与start方法成对出现
    

    上述代码会将代码耗时保存在file路径下的appDebug.trace 文件里面,打开一个androidStudio窗口将文件拖进去就可以打开。

    通过上述图表分析,找到最耗时的函数进行优化

    五、优化手段

    • 1.没有创建handler,没有操作UI,异步要求不是很高的情况可以开启子线程执行耗时代码

    例:部分第三方的sdk初始化的代码中有创建Handler,这种情况下就不可以将其放入子线程

    • 2.将耗时初始化代码变成懒加载形式,通过单例等手段,使用的时候再加载
    • 3.延时加载或者在onResume的时候在加载等其它手段:总之我们优化的目的就是让application的onCreate和 activity的onCreate方法中不执行耗时代码或者将其挪动到其它地方去。

    通过反编译腾讯QQ早期版本的APK发现其onCreate方法中是没有执行任何代码的,非常干净。

    相关文章

      网友评论

        本文标题:part01_android应用启动速度优化

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