释放广播接受者

转发地址:http://www.aichengxu.com/view/1600364


Android中广播接收者的注册与释放

2015-04-06 16:44  本站整理  浏览(331)
Android中常常利用广播机制来在各个组件之间传递消息,例如在Activity和Service之间。 

在Activity中注册广播接收者,接收来自Service的广播:

[code]public class LoginReceiver extends BroadcastReceiver {
        private boolean loginResult = false;
        @Override
        public void onReceive(Context context, Intent intent) {
            // String cmdAction = intent.getAction();
            unregisterReceiver(this);//释放广播接收者
            loginResult = intent.getBooleanExtra("login_result", false);
            if (loginResult) {
                Intent loginIntent = new Intent(LoginActivity.this,MainActivity.class);
                startActivity(loginIntent);
                Log.d("IntoMainActivity", "进入主Activity");
                LoginActivity.this.finish();
                Log.d("FinishLoginActivity", "结束登陆Activity");
            } else {

            }
        }

    }


其中的onReceive()方法是继承BroadcastReceiver时必须实现的方法,当接收到指定的广播时,调用该方法。 

将自定义的广播接收者注册到Activity中并接收来自其他组件的广播:

[code]        // 注册自定义的登陆结果广播接收者
        loginRec = new LoginReceiver();
        IntentFilter filter = new IntentFilter();
        filter.addAction("com.whu.mobileoa.login_result");
        registerReceiver(loginRec, filter);


在Service组件中定义并发送广播:

[code]Intent loginReltInt = new Intent();
if (loginResult == 0) {                     loginReltInt.putExtra("login_result", false);// 登陆验证失败
} else {                        loginReltInt.putExtra("login_result", true);// 登陆验证成功
}                   loginReltInt.setAction("com.whu.mobileoa.login_result");
sendBroadcast(loginReltInt);


我在这里要进行的操作是,当接收到广播并进行判断后,需要跳转到其他的Activity,并关闭当前的Activity。如果在关闭当前Activity之前没有释放注册到它那里的广播接收者,会报广播接收者泄露的错误: 

Activity…… has leaked IntentReceiver…… that was originally registered here. Are you missing a call to unregisterReceiver()? 

出现这个错误的原因在当前Activity被销毁前,没有释放注册的广播接收者。 

因此在接收并处理完广播消息后(即回调了onReceive()时),需要释放之前注册的广播接收者:

[code]unregisterReceiver(this);//释放广播接收者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值