不讲太多大道理,从实战的角度来说明一下Android中的BroadcastReceiver如何使用,这里以广播的动态注册为例子。
需求:登录界面有登录成功或者失败或者登出等操作,这些操作完成之后需要通知主界面(或者其它界面)进行刷新来完成数据的同步,我们可以采用接口回调的方式,
具体思想可以参考: http://blog.csdn.net/s003603u/article/details/46813509
同时,我们也可以通过注册广播,发送广播的方式进行数据同步。
当你需要动态使用广播时,可以直接参考上面的例子。
需求:登录界面有登录成功或者失败或者登出等操作,这些操作完成之后需要通知主界面(或者其它界面)进行刷新来完成数据的同步,我们可以采用接口回调的方式,
具体思想可以参考: http://blog.csdn.net/s003603u/article/details/46813509
同时,我们也可以通过注册广播,发送广播的方式进行数据同步。
例如:需要数据同步的界面为主界面,相关说明请参考代码中注释
/**
* 主界面
*/
public class MainActivity ... {
private DataSynchronizationReceiver dataSynchronizationReceiver;//声明一个广播
@Override
protected void onCreate(Bundle savedInstanceState) {
...
dataSynchronizationReceiver = new DataSynchronizationReceiver();
//广播的注册
//注册广播过滤器
//登录成功的广播
registerReceiver(dataSynchronizationReceiver, new IntentFilter(Constant.Broadcast.ON_LOGIN_SUCCESS));
//登出成功的广播
registerReceiver(dataSynchronizationReceiver, new IntentFilter(Constant.Broadcast.ON_LOGIN_OUT));
}
@Override
public void onDestroy() {
...
//广播的注册和注销必须成对出现
unregisterReceiver(dataSynchronizationReceiver);
...
}
class DataSynchronizationReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction() == Constant.Broadcast.ON_LOGIN_SUCCESS) {
//收到登录成功的广播
onLoginSuccess();
} else if (intent.getAction() == Constant.Broadcast.ON_LOGIN_OUT) {
//收到登出成功的广播
onLoginOut();
}
}
}
/**
* 登录成功处理
*/
public void onLoginSuccess() {
...
}
/**
* 登出处理
*/
public void onLoginOut() {
...
}
}
登录界面负责发送广播
public class LoginActivity extends Activity {
...
private void loginSuccess() {
...
//登录成功,发送广播
Intent intent = new Intent(Constant.Broadcast.ON_LOGIN_SUCCESS);
this.sendBroadcast(intent);
...
}
private void loginOut() {
...
//登出成功,发送广播
Intent intent = new Intent(Constant.Broadcast.ON_LOGIN_OUT);
this.sendBroadcast(intent);
...
}
...
}
当你需要动态使用广播时,可以直接参考上面的例子。
其实还有一种方式就是通过在配置文件中注册广播,具体细节可以百度一下,现在稍微做点总结:
1、广播的生命周期可以这么说,即当广播来时,广播重新创建----调用对象----实现onReceiver----结束。
2、广播的生命周期只有10s,在onReceiver方法中不宜做耗时操作,否则会造成ANR。
3、如果真的要做耗时操作,可以交给Service而不能交给线程来完成,即在service中开启线程或者通过发msg给handler启动线程。
4、广播分常驻型(静态)和非常驻型(动态)两种,在Android的广播机制中,动态注册的优先级高于静态注册,动态注册的生命周期跟程序中具体模块的生命周期一样。
5、程序关闭后,动态注册的广播是不能接收到广播的,而静态注册在当程序关闭后,如果有广播发来,还能继续启动程序。
今天的博客就到这里,写的不算深入,只是从应用的角度进行分析,欢迎大家拍砖、评论!
谢谢!