一直以来都想着写一篇关于四大组件的文章,可是一直懒一直都没去写,今天终于抱起了电脑来敲一篇。这篇文章是关于安卓四大组件之一的广播的使用,网上关于这方面的文章也是相当多,我这里根据我一年多的工作中总结下来使用比较多的东西来说说,核心内容是Android的局部广播,也称本地广播。
一、推荐原因
我们都知道平常使用的Broadcast都属于系统全局广播,也就是发出的广播可以被其它应用程序接收到,并且我们也可以接受来自于其他任何应用程序的广播。这样一来会造成一些问题,一是消耗性能,二是容易引起安全性的问题,比如我们发送的一些携带关键性数据的广播可能被其他应用程序截获,或者其他的应用程序不停地向我们广播接收器中发送各种垃圾广播,所以为了能够简单的解决这方面的问题,Android引入了一套广播本地广播机制,使用该机制发出的广播只能够在本应用内部进行传递,并且广播接收器也只能接收来自本应用发出的广播。
二、使用场景
更新UI,举个简单的例子,我们的App一般都会有用户登录的功能,很多时候有这样的需求,我们在用户登录完成后,有些界面需要根据登录信息作出及时的响应,相应的做出UI上的改变,针对这种情况,我平时用的比较多的就是使用局部广播来实现,在需要作出改变的地方添加广播接受器进行数据接收即可。
三、代码实战
这里使用LocalBroadcastManager这个单例类来进行实现,具体操作代码如下:
首先我们要自定义广播,定义一个action:
/**
* 自定义广播
*/
public static final String LOGIN_ACTION = "com.archie.action.LOGIN_ACTION";
然后定义一个发送广播的方法:
/**
* 发送我们的局部广播
*/
private void sendBroadcast(){
LocalBroadcastManager.getInstance(this).sendBroadcast(
new Intent(LOGIN_ACTION)
);
}
然后,我们在需要发送广播的地方调用我们的sendBroadcast()方法,这里大家根据自己的具体情况调用该发送即可。
好了,发送广播说完了,现在来说说接收广播,这里我们创建一个类让它继承自BroadcastReceiver广播接受器这个类,重写onReceive()方法:
/**
* 自定义广播接受器,用来处理登录广播
*/
private class LoginBroadcastReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
//处理我们具体的逻辑,更新UI
}
}
有了我们的广播接收器之后呢,我们要去动态的注册我们的广播接收器,这里分别创建了注册和取消注册的两个方法,一般是在onCreate()方法中注册,然后在onDestroy()方法中取消注册,为了防止内存泄漏,具体代码如下:
//广播接收器
private LoginBroadcastReceiver mReceiver = new LoginBroadcastReceiver();
//注册广播方法
private void registerLoginBroadcast(){
IntentFilter intentFilter = new IntentFilter(LoginActivity.LOGIN_ACTION);
LocalBroadcastManager.getInstance(mContext).registerReceiver(mReceiver,intentFilter);
}
//取消注册
private void unRegisterLoginBroadcast(){
LocalBroadcastManager.getInstance(mContext).unregisterReceiver(mReceiver);
}
好了,到这里就完成了我们本地广播的使用。写的仓促,有不对的地方欢迎批评指正,谢谢各位亲!