在开发过程中,我们都会必不可免的需要在application文件中初始化一些东西。然后等项目越来越大,需要初始化的东西也就越来越多。所以每当我们冷启动app的时候有时会出现“该程序无法相应”的问题,这就是由于需要初始化的东西太多了,已经超出5秒了,所以出现的ANR。
当然在application中初始化一些东西是必须的,这个无法避免,但是我们可以优化一下这些代码。在这里我提供一种优化的方法,那就是使用一个非常强大的工具-----EventBus,下面我就讲一下如何用EventBus去优化。
我们先要说一下原理,app冷启动首先是要初始化application,然后进入启动页,我们可以在applicaton中注册EventBus,然后当app进入启动页后用EventBus发出一条消息,在application中接收,告诉application你可以进行初始化了,然后在application的onEventBackgroundThread方法中进行初始化操作,等初始化完成以后,用EventBus发出一条消息,在启动页中接收,告诉启动页你可以进入主页面了。好了,流程就是这么个流程,这样的话大约可以节省一般的冷启动时间,博主亲测有效。下面我们来实现一下。
1、首先,我们需要导入EventBus
compile 'org.greenrobot:eventbus:3.0.0'
2、然后创建一个可以供EventBus传递消息的一个实体类
public class StartPageEventBus {
private String msg;
public StartPageEventBus(String msg){
this.msg = msg;
}
public String getMsg(){
return msg;
}
}
private final String START_APP = "startApp";
@Override
public void onCreate() {
super.onCreate();
Log.i("eventlog","进入application");
initEventBus();//使用EventBus优化app冷启动出现ANR问题
}
/*
* 使用EventBus优化app冷启动出现ANR问题
*
* */
private void initEventBus() {
EventBus.getDefault().register(this);
}
@Subscribe(threadMode = ThreadMode.BACKGROUND)
public void onEventBackgroundThread(StartPageEventBus event){
if(event.getMsg()!=null&&START_APP.equals(event.getMsg())){
Log.i("eventlog","进行初始化操作");
//初始化完成以后发出消息在启动页接收,通知启动页可以进入主页面了,然后进行eventbus解绑
EventBus.getDefault().post(new StartPageEventBus("aa"));
EventBus.getDefault().unregister(this);
}
}
4、在启动页注册eventbus,并接受消息进入主页面
@Subscribe(threadMode = ThreadMode.BACKGROUND)
public void onEventBackgroundThread(StartPageEventBus event){
if("aa".equals(event.getMsg())){
Log.i("eventlog","初始化操作完成");
}
}
这就是大概的步骤了