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