Android启动优化手册

Android启动优化实践
本文介绍如何使用TraceView定位Android应用的启动性能瓶颈,并提供了一系列优化建议,包括UI显示流程优化、多Dex策略、UI优化技巧及缓存策略等。

2018/5/21


工具

TraceView定位性能瓶颈,可以看见每个方法耗时、堆栈等,神器。

 

UI显示流程

预先有一个空白window

onResume后,new一个window,并且设置décor给window,然后开始绘制。绘制好后,window替换原来的空白window

 

splash(特殊机型、版本可能会失效,需要积累经验)

我们可以利用的第一个时间段

<style name="Splash" parent="Theme.AppCompat.Light.NoActionBar">
    <item
name="android:windowBackground">@drawable/splash</item>
</style>

 

<activity android:name=".MainActivity"
    android:theme="@style/Splash">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

 

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

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

 

onResume的MessageIdle

我们可以利用的第二个时间段

@Override
protected void onResume() {
    super.onResume();
    Looper.myQueue().addIdleHandler(new MessageQueue.IdleHandler() {
        @Override
        public boolean queueIdle() {
            //耗时操作
            return false;
        }
    });
}

 

Multidex

https://blog.youkuaiyun.com/qq_36523667/article/details/80329077

插件apk,像微信小程序一样,使用的时候再下载,加载,很不错。主apk一般都是启动所必须的类。

 

UI优化

理想的启动时仅仅绘制UI,把UI以外的逻辑放到合适的时间执行。但是UI事实上也是越快越好,不是吗?可以看我的渲染优化手册

第三方组件

在合理的时间段内初始化

子线程的科学使用

他也消耗时间片,所以你需要给他设置优先级,在合适的时候给以合适的可获得的时间片大小的约束

cache策略

数据库cache,在UI显示后,显示的数据是数据库的,或者是一些默认数据,然后才是网络请求后得来的最新数据。

打包策略

如果要在UI绘制阶段进行网络请求,请尽量打包他们

业务逻辑策略

比如splash,可以先显示本地的,UI显示后再下载,然后cache到本地,下次进入的时候再使用新的

线程池

开销不小,在启动的时候,使用需谨慎。网络请求会创建线程池,所以网络请求能延时自然是最好。

SharedPreferences

IO操作都是耗时大户,别看他比sqlite轻量就忽视他。经过检测保存一个boolean变量耗时120+毫秒以上。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值