首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用BroadcastReceiver

使用BroadcastReceiver
EN

Stack Overflow用户
提问于 2013-11-12 16:33:05
回答 3查看 195关注 0票数 0

我在活动中定义了一个BroadcastReceiver,其方式如下,以从运行在另一个线程上的IntentService获得结果:

代码语言:javascript
复制
receiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {

            boolean isSyncCompleted = intent.getBooleanExtra("issynccompleted", false);
            if (isSyncCompleted){
                showAlert("Sync completed in service");
            }
            context.unregisterReceiver(receiver);
        }
    };
    //register receiver for service
    registerReceiver(receiver, new IntentFilter(ContentSyncService.SERVICE_INTENT_FILTER));

请注意,我是在onReceive代码块中而不是在onPause中注销接收器。那是因为我想让接收者倾听,即使活动已经被摧毁。

但是我一直收到一个错误:"Activity .泄露了IntentReceiver .它原来是在这里注册的。您是否错过了对unregisterReceiver()的电话?“

EN

回答 3

Stack Overflow用户

发布于 2013-11-12 16:57:12

这个解决方案对我有效,我重写活动方法,而不是BrodcastReceiver:

代码语言:javascript
复制
@Override
protected void onPause() {
    super.onPause();
    // unregister receiver
    LocalBroadcastManager.getInstance(this).unregisterReceiver(
            mMessageReceiver);
}

@Override
protected void onResume() {
    super.onResume();
    // register receiver
    LocalBroadcastManager.getInstance(this).registerReceiver(
            mMessageReceiver, new IntentFilter("your.package.name"));
}
票数 0
EN

Stack Overflow用户

发布于 2013-11-12 19:12:59

只有当您收到至少一次操作时,才会注销接收方。因此,您需要在OnPause (如果需要的话在其他地方)注销您的接收器,因为在那里您是安全的,这将永远注销接收器。

票数 0
EN

Stack Overflow用户

发布于 2013-11-21 18:38:22

在您的接收器内使用context.unregisterReceiver(接收器),

试一试:activity.unregisterReceiver(这个);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19934676

复制
相关文章

相似问题

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