例如:需要数据同步的界面为主界面,相关说明请参考代码中注释
/** * 主界面 */ 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、程序关闭后,动态注册的广播是不能接收到广播的,而静态注册在当程序关闭后,如果有广播发来,还能继续启动程序。
今天的博客就到这里,写的不算深入,只是从应用的角度进行分析,欢迎大家拍砖、评论!
谢谢!