Android中广播接收者的注册与释放
来源:互联网 发布:政府集中采购流程 知乎 编辑:程序博客网 时间:2024/05/29 10:55
Android中常常利用广播机制来在各个组件之间传递消息,例如在Activity和Service之间。
在Activity中注册广播接收者,接收来自Service的广播:
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中并接收来自其他组件的广播:
// 注册自定义的登陆结果广播接收者 loginRec = new LoginReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction("com.whu.mobileoa.login_result"); registerReceiver(loginRec, filter);
在Service组件中定义并发送广播:
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()时),需要释放之前注册的广播接收者:
unregisterReceiver(this);//释放广播接收者
依此类推,在其他组件中注册广播接收者,也需要在组件销毁前释放广播接收者。
0 1
- Android中广播接收者的注册与释放
- Android---广播(Broadcast)---广播接收者的注册过程分析
- Android 动态注册广播接收者
- Android中广播接收者
- Android在Service中注册动态广播接收者
- android,利用广播接收者调用服务的方法,代码注册广播接收者
- android服务_使用服务注册特殊的广播接收者
- 42_代码注册广播接受者(广播接收者与Activity或service的生命周期相同)&打电话的广播接收者
- Android-使用服务注册广播接收者
- Android 使用服务注册广播接收者
- Android 广播发送者与广播接收者
- Android广播发送者与广播接收者
- 特殊的广播接收者(界面注册)
- 广播接收者的两种注册方式
- 注册广播接收者的两种方式
- Android 广播接收者的生命周期
- Android 广播接收者的生命周期
- 动态注册广播接收者
- UI_XML&JSON
- 腾格里沙漠部分污染地被填埋 记者采访被限自由
- 第二章第四题
- 设置itemcontrol的item点击前后不同状态
- 腾格里沙漠部分污染地被填埋 记者采访被限自由
- Android中广播接收者的注册与释放
- Nginx高性能WEB服务器系列
- 第二章第六题
- 正则表达式简单用法
- C++学习之数组名a与&a的区别
- Android:动态注册BroadcastReceiver
- hibernate的抓取策略
- 【C语言】用可变参数列表实现printf函数
- 拦截器拦截 ajax代码,以及乱码处理