优化Android 应用启动速度(应用启动慢的真正原因探究)
开门见山告诉答案:
一个Android 应用真正启动慢的原因是在Application 里面做了耗时的操作。把这些耗时的操作找出来并且new Thread 放到异步线程里面,那么问题就解决了。
下面看我的优化过程,这是我在未优化之前的Application的onCreate() 方法里面做的事情:
@Overridepublic void onCreate() {mUPushHelper = new UPushHelper(this);mUPushHelper.init();if (AppHelper.isAppMainProcess(this)) {super.onCreate();Log.v("tag_2","1");SDKInitializer.initialize(app);Log.v("tag_2","2");QbSdk.initX5Environment(app, null);Log.v("tag_2","3");TuSdk.enableDebugLog(!IS_OFFICIAL);TuSdk.init(app, "1faa2d433fef2f60-03-glpcq1");Log.v("tag_2","4");MobclickAgent.setDebugMode(!IS_OFFICIAL);Log.v("tag_2","5");}}
看上面,我把每个方法执行的间隔时间都给打印出来了。如下图所示:
每个方法的耗时一目了然。1和2之间耗时270毫秒,3和4之间耗时330毫秒。4和5之间耗时340毫秒。
于是我把这些方法放到一个线程里面去执行,如下所示:
@Overridepublic void onCreate() {mUPushHelper = new UPushHelper(this);mUPushHelper.init();if (AppHelper.isAppMainProcess(this)) {super.onCreate();// //耗时操作,一定要放到异步线程里new Thread() {@Overridepublic void run() {Looper.prepare();SDKInitializer.initialize(app);QbSdk.initX5Environment(app, null);TuSdk.enableDebugLog(!IS_OFFICIAL);TuSdk.init(app, "1faa2d433fef2f60-03-glpcq1");Looper.loop();}}.start();MobclickAgent.setDebugMode(!IS_OFFICIAL);}}
注意看上面的Looper.prepare() 和 Looper.loop() ,有些方法的运行需要在一个有Looper的线程才不会报错,所以我就给这个线程一个Looper。
我做了这一步优化之后,日志显示启动时间减少了270毫秒+330毫秒= 600毫秒。
运行OK ,启动速度明显提示。