利用EventBus一键退出APP关闭所有activity

之前用过在Application new List<Activity>来存每一个打开过的activity ,然后遍历finish. 

但是操作不好就会出现内存溢出 ,因为 :activity 被你代码finish 时list还是持有activity. 

当然你可以在finish之前把他remove掉,但太麻烦.

这里推荐用EventBus 

 首页 注册

EventBus.getDefault().register(this);

然后在你需要的地方去发送通知

@Override
public void onBackPressed() {
//发送关闭通知,全部被你注册的activity都会接收到通知
    sendMessage(EXIT_APP, "");
}
/*
 *通知
 */
protected void acceptMessage(int code, Object object) {
  //接收到关闭页面
   if(code==EXIT_APP){
       if(!isFinishing()){
          finish();
       }
   }
}
下面是外层方法

//发送消息
public void sendMessage(int code, Object o) {
    if (eventBean == null) {
        eventBean = new EventBean();
    }
    eventBean.setCode(code);
    eventBean.setJob(o);
    EventBus.getDefault().postSticky(eventBean);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void simpleEventBus(EventBean userEvent) {
    acceptMessage(userEvent.getCode(), userEvent.getJob());
}

记得解除绑定

@Override
protected void onDestroy() {
    super.onDestroy();
    EventBus.getDefault().removeAllStickyEvents();
    EventBus.getDefault().unregister(this);
}

猜你喜欢

转载自blog.csdn.net/qq_36767261/article/details/108801548
今日推荐