EventBus在Fragment生命周期中的注册位置 (BUG记录)

  @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EventBus.getDefault().register(this);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }
    
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onMessageEvent(HappyEvent event) {
        tvHappy.setText(event.getHappy());
    }

复制代码
  • 平时 在onCreate中注册时没问题的,今天发现有些特殊情况,Fragment会调用onCreate后不会调用onCreateView
  • 例如ViewPager+Fragment中,如果Fragment已经实例化,那么在Activity在经历onDestroy,onCreate
  • Fragment也会经历onDestroy,onCreate,然后如果Fragment不在缓存区间,不会调用onCreateView
  • 这样注册的onMessageEvent里处理的事件就会引发空指针


更改

   @Override
    public void onStart() {
        super.onStart();
        if (!EventBus.getDefault().isRegistered(this)) {
            EventBus.getDefault().register(this);
        }
    }

复制代码

你可能感兴趣的:(EventBus在Fragment生命周期中的注册位置 (BUG记录))