Application 启动速度优化

本文探讨了如何优化Application的启动速度,包括避免在onCreate方法中进行同步IO操作、延迟初始化SP、利用Manifest元数据配置、按需加载资源以及设置过渡Activity。特别强调了SP的异步初始化和管理对提高启动性能的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

优化点

1、不要在onCreate方法中同步进行io操作

同步io操作会十分耗时,直接导致Application的运行速度。

2、不要在onCreate方法中初始化sp后立即操作sp

Context.getSharedPerfences(String name,int mode);会启动单独的线去加载sp,如下:


private void startLoadFromDisk() {
    synchronized (this) {
        mLoaded = false;
    }
    new Thread("SharedPreferencesImpl-load") {
        public void run() {
            synchronized (SharedPreferencesImpl.this) {
                loadFromDiskLocked();
            }
        }
    }.start();
}

虽然sp的加载是单独的线程去获取的,但是如果sp比较大,直接调用get获取数据,则需要wait 直到sp加载完成。

synchronized (this) {
    awaitLoadedLocked();
    Boolean v = (Boolean)mMap.get(key);
    return v != null ? v : defValue;
}


private void awaitLoadedLocked() {
    if (!mLoaded) {
        // Raise an explicit StrictMode onReadFromDisk for this
        // thread, since the real read will be in a different
        // thread and otherwise ignored by StrictMode.
        BlockGuard.getThreadPolicy().onReadFromDisk();
    }
    while (!mLoaded) {
        try {
            wait();
        } catch (InterruptedException unused) {
        }
    }
}

3、简单配置,最好使用Manifest.xml metadata 配置,否则使用小sp保存

manifest.xml的加载是系统在应用安装时预先加载到packageManagerService中保存的,所以会比文件配置再读取io更合适。

如果第一次打开应用的初始化配置项需要必须在oncreate读取,则把这些简单的配置项,建立一个单独的sp保存,这样配置项目少,读取时间也会短一些。

4、按需加载

一些不必要放在oncreate中初始化的项目,应该通过Service或单独开启线程去加载资源。等oncreate需要用到的时候加载,保证不会阻塞ui线程。

5、设置过度Activity

不给activity设置layout,只给activity的主题设置windowbg,在oncreate添加跳转的逻辑。

总结

实际是最重要的一步,这些优化点是通过对公司项目的Application优化得来的,特别是sp的优化,其中异步初始化加锁,调用时等待,初始化完成后唤醒这个设计十分有用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值