Android技术知识Android开发Android进阶之路

App启动优化

2020-04-27  本文已影响0人  arvinljw

App的启动被分成了:

因为冷启动的流程,会先加载并启动app,启动后会马上显示一个空白窗口,然后再创建app进程,创建launchActivity,加载和绘制布局。

这个过程中我们能优化处理的部分就是:

注意:如果在Application和launchActivity的以上方法中有启动其他activity的,那么启动的这个activity的onCreate,onStart,onResume方法也需要优化

黑白屏优化

这个空白窗口在有些主题下是白色有些主题下是黑色,这样就出现了黑白屏的问题。

如果app启动的过程中,有耗时操作或者性能差一些的手机,这个黑白屏的显示时间就会让用户感知到,影响体验,而我们能对这个空白窗口的样式进行改变,变成我们启动页的样式或者大体和启动页的样式一致,这样我们就比较优雅的解决了黑白屏的问题。

还有对于直接使用将背景透明化的也不太合适,因为这样会使用户感觉点了app之后没有响应,这段时间也是和启动时是否耗时和手机性能有关,所以这样的处理并不优雅,也违背了google的设计。

知道原理之后其实就很简单:

<style name="LauncherTheme" parent="AppTheme">
    <item name="android:windowBackground">@drawable/launcher_bg</item>
    <item name="android:windowFullscreen">true</item>
</style>
<activity
    android:name=".LauncherActivity"
    android:theme="@style/LauncherTheme">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<RelativeLayout 
    ...
    android:background="@drawable/launcher_bg"
    >
</RelativeLayout>    

launcher_bg例如:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/colorAccent" />

    <item android:top="150dp">
        <bitmap
            android:gravity="top"
            android:src="@drawable/ic_launcher" />
    </item>
</layer-list>

这里有点讲究,设计最好启动页使用纯色的背景和简单的icon处理,这样方便代码设置颜色,避免直接使用一张很大的图,也影响性能。

postDelayed(new Runnable() {
    @Override
    public void run() {
        startActivity(new Intent(LauncherActivity.this, MainActivity.class));
        LauncherActivity.this.finish();
    }
}, 2000);

例如这里的简单延时两秒启动过MainActivity。

代码优化

黑白屏结局之后,我们再来看看代码的优化,其实代码的优化,只需要知道在哪些点上去检测,然后尽量不要做耗时操作即可。

对于这个优化,我们直接看有可能不那么直观,Android中也提供了分析工具,可以检测app启动时间,以onCreate方法为例:

@Override
public void onCreate() {
    super.onCreate();
    File file = new File(Environment.getExternalStorageState(), "app.trace");
    Debug.startMethodTracing(file.getAbsolutePath());
    //业务逻辑
    Debug.stopMethodTracing();
}

这里在app.trace文件中就保存下来了业务逻辑部分执行的时间,通过

adb pull /storage/emulated/0/app.trace

这个命令就能得到app.trace文件,然后放到Android Studio中就能看到,业务逻辑部分哪些方法执行了多少时间,我们就能针对优化了。

具体的方式还是需要根据具体业务处理。

UI渲染优化

代码优化部分处理完了之后,我们还有就是UI布局的优化,其中就涉及到过度绘制问题,因为gpu的绘制完全根据cpu的指令来的,所以只要我们UI布局有重复绘制的部分,gpu依然会重复绘制,而这部分就是可以优化的,这也是导致过度绘制的原因。

优化的点包括:

上一篇 下一篇

猜你喜欢

热点阅读