首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LocalBroadcastManager、冗余活动、活动生命周期

LocalBroadcastManager、冗余活动、活动生命周期
EN

Stack Overflow用户
提问于 2016-08-23 05:37:16
回答 1查看 58关注 0票数 0

我有一个很大的应用程序,我们的第一个活动是MainActivity,第二个是LoginActivity (出于多种原因,可以是片段或DialogFragment)

LoginActivity由MainActivity初始化,在正常流程中,应用程序需要重新加载NavigationDrawer中的header。在MainActivity中,我已经有一个类似这样的函数。

代码语言:javascript
运行
复制
private void loadUser () {
   //Reload header
}

在LoginActivity中,我有一个类似于下一个的LocalBroadcastManager

代码语言:javascript
运行
复制
Intent intent = new Intent ("RELOAD_MENU");
LocalBroadcastManager.getInstance(c).sendBroadcast(intent);

在MainActivity里面我有接收器

代码语言:javascript
运行
复制
 private BroadcastReceiver loginReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context arg0, Intent arg1) {
        loadUser();
    }
};

MainActivity上的onPause和onResume

代码语言:javascript
运行
复制
@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。

EN

Stack Overflow用户

回答已采纳

发布于 2016-08-23 05:57:55

问题是您在MainActivityonPause ()方法中注销了接收器。

您可能希望在onCreate()中注册接收器,并在onDestroy()中取消注册,否则当您在LoginActivity中调用LocalBroadcastManager.getInstance(c).sendBroadcast(intent);时,没有向LocalBroadcastManager注册侦听器,因为MainActivity暂停,而LoginActivity在屏幕上可见。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39089118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档