我有一个很大的应用程序,我们的第一个活动是MainActivity,第二个是LoginActivity (出于多种原因,可以是片段或DialogFragment)
LoginActivity由MainActivity初始化,在正常流程中,应用程序需要重新加载NavigationDrawer中的header。在MainActivity中,我已经有一个类似这样的函数。
private void loadUser () {
//Reload header
}在LoginActivity中,我有一个类似于下一个的LocalBroadcastManager
Intent intent = new Intent ("RELOAD_MENU");
LocalBroadcastManager.getInstance(c).sendBroadcast(intent);在MainActivity里面我有接收器
private BroadcastReceiver loginReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context arg0, Intent arg1) {
loadUser();
}
};MainActivity上的onPause和onResume
@Override
protected void onResume() {
super.onResume();
LocalBroadcastManager.getInstance(this).registerReceiver(loginReceiver,
new IntentFilter("RELOAD_MENU"));
}
@Override
protected void onPause() {
//LocalBroadcastManager onPause
super.onPause();
LocalBroadcastManager.getInstance(this).unregisterReceiver(loginReceiver);
}我漏掉了什么吗?
活动A初始化活动B,然后活动B启动活动A必须监听的LocalBroadcast出现问题?
我也用onDestroy做了一些测试,只是为了测试,我没有收到LocalBroadcast。
发布于 2016-08-23 05:57:55
问题是您在MainActivity的onPause ()方法中注销了接收器。
您可能希望在onCreate()中注册接收器,并在onDestroy()中取消注册,否则当您在LoginActivity中调用LocalBroadcastManager.getInstance(c).sendBroadcast(intent);时,没有向LocalBroadcastManager注册侦听器,因为MainActivity暂停,而LoginActivity在屏幕上可见。
https://stackoverflow.com/questions/39089118
复制相似问题