解决app冷启动出现ANR问题

在开发过程中,我们都会必不可免的需要在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;
    }

}


3、在application中注册eventbus,并接受消息,进行初始化操作

    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","初始化操作完成");
        }

    }






这就是大概的步骤了







  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值