executorService.submit(new Runnable() {
@Override
public void run() {
initShareSDK();
}
});
// Debug.stopMethodTracing();
}
经过测试,现在打开页面基本是秒开的。
但是又出现了问题,比如有的是必须要先执行完毕才能进入页面的。也就是说,得先让它执行完毕,才能进入主页。
4.第二次改造(CountDownLatch)
很简单-加锁就行,关于锁的介绍就不在这里赘述了,有很多,但是作者用的是CountDownLatch, 又称之为门栓,构造函数就是指定门栓的个数, latch.countDown(); 每次调用都减少一个门栓数, latch.await(); 就是开启等待,当门栓数为0时,就放开去执行下面的逻辑。
@Override
public void onCreate() {
super.onCreate();
// Debug.startMethodTracing(“MyApplication”);
final CountDownLatch latch = new CountDownLatch(1);
ExecutorService executorService = Executors.newFixedThreadPool(CORE_POOL_SIZE);
executorService.submit(new Runnable() {
@Override
public void run() {
initBugly();
latch.countDown();
}
});
executorService.submit(new Runnable() {
@Override
public void run() {
initBaiduMap();
}
});
executorService.submit(new Runnable() {
@Override
public void run() {
initJPushInterface();
}
});
executorService.submit(new Runnable() {
@Override
public void run() {
initShareSDK();
}
});
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
// Debug.stopMethodTracing();
}
这样就行了,只有当initBugly执行完毕才能继续跳转页面,当然值得补充的是,之所以要加门栓,是因为在onCreate方法里面,可能还有其他必须在主线程才能初始化的其他耗时任务,而initBugly可以不需要在主线程里面初始化,但是又必须得初始化完毕才能跳转页面。所以为了不再增加时间,才启动线程池+门栓去初始化
好了,既加快了速度,又可以保证