【Android实战决】BroadcastReceiver之快速上手使用广播

不讲太多大道理,从实战的角度来说明一下Android中的BroadcastReceiver如何使用,这里以广播的动态注册为例子。
需求:登录界面有登录成功或者失败或者登出等操作,这些操作完成之后需要通知主界面(或者其它界面)进行刷新来完成数据的同步,我们可以采用接口回调的方式,
具体思想可以参考:  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、程序关闭后,动态注册的广播是不能接收到广播的,而静态注册在当程序关闭后,如果有广播发来,还能继续启动程序。


今天的博客就到这里,写的不算深入,只是从应用的角度进行分析,欢迎大家拍砖、评论!

谢谢!


你可能感兴趣的:(【Android实战决】BroadcastReceiver之快速上手使用广播)