之前也做过启动优化,无非是把那些耗时的操作放到子线程,或者延迟初始化。
但是对于我们这个项目,合作方要求必须更加优化启动速度。
既然已经提出来了, 不可逃避,那就想尽各种办法去优化吧。
用methodtrace 去查找方法的执行时间,凡是执行超过100ms 的,都要优化。 当然从最大的开始优化。很多超过200ms 的,更要想办法去优化。
有写时候,可以用锁,让主线程去等待一下子线程,但是会开两个线程去做事情。大概可以优化500ms。比如我们的插件框架。Fragment 的加载依赖于插件框架的加载完成,但是不得不提的是,加载太慢了。这之后,我可以在主工程要用插件的地方,等着子线程去加载完成。有很多方式,比如锁。其实很多人都会认为不可以在子线程初始化,其实是可以的。
我是开了两个线程,太多也不好。现在都是多核处理器,那么两个线程不会浪费多核。
比如我下面这个代码。
Thread thread = new Thread("PluginManager.init") { @Override public void run() { super.run(); HotfixManager.init(application); PluginManager.init(application); PluginManager.preLoadDexFile(); } }; thread.setPriority(9); thread.start();经过以上优化,我的app 又在不能优化的基础上,提高了1-2s 的启动速度。在小米6可以达到1.2s 的启动速度。
1.既然现在的小优化不能达到你要的水平,那么就大刀阔斧的改吧。因为小改是不会有大产出,而且反正还在开发阶段,那么就什么都不要怕了。
2.不要懒,也不要怕改了代码,跑程序慢。勤奋一点,多几几次。