转自:http://blog.csdn.net/plussoft/article/details/12971265
LocalBroadcastManager简介
如果你对 BroadcastReceiver 还不了解,那么请移步(http://blog.csdn.net/plussoft/article/details/12871571)。
BroadcastReceiver 的设计初衷就是从全局考虑的,可以方便应用程序和系统、应用程序之间、应用程序内的通信,所以对单个应用程序而言BroadcastReceiver是存在安全性问题的。这些安全问题都可以通过 LocalBroadcastManager 来解决,LocalBroadcastManager 只会将广播限定在当前应用程序中。LocalBroadcastManager 发送的广播不会离开你的应用程序,同样也不会接收来自其它应用程序的广播,因此你可以放心的在 LocalBroadcastManager 中传播敏感信息。同时由于LocalBroadcastManager不需要用到跨进程机制,因此相对 BroadcastReceiver 而言要更为高效。
LocalBroadcastManager 是 android.support.v4 扩展包中的一个类。
范例
MainActivity
- public class MainActivity extends Activity {
- Button button1;
- MyBroadcastReceiver myBroadcastReceiver;
- LocalBroadcastManager lbm;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- /*
- * LocalBroadcastManager为单例模式
- * 在应用程序任何地方均可调用LocalBroadcastManager.getInstance(context)获取唯一实例
- * 如果想要用于接收广播
- * 那么就要将LocalBroadcastManager定义在有效的生命周期内
- */
- lbm = LocalBroadcastManager.getInstance(this);
- myBroadcastReceiver = new MyBroadcastReceiver();
- IntentFilter filter = new IntentFilter();
- filter.addAction("com.plusjun.test.hahaha");
- //注册接收器以及过滤规则
- lbm.registerReceiver(myBroadcastReceiver, filter);
- button1 = (Button)findViewById(R.id.button1);
- button1.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- Intent intent = new Intent();
- intent.setAction("com.plusjun.test.hahaha");
- intent.putExtra("name", "plus");
- //发送广播
- lbm.sendBroadcast(intent);
- }
- });
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- //别忘了解除接收器
- lbm.unregisterReceiver(myBroadcastReceiver);
- }
- }
MyBroadcastReceiver
- public class MyBroadcastReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- String str = intent.getStringExtra("name");
- sLog(str);
- }
- private void sLog(String str) {
- Log.i("MyBroadcastReceiver", str);
- }
- }
和 BroadcastReceiver 注册与发送广播差不多,只是调用对象从 Activity 换成了 LocalBroadcastManager。
注意,LocalBroadcastManager 接收器只能通过代码注册(动态注册),不存在 BroadcastReceiver 的那种AndroidManifest注册。
本文介绍了LocalBroadcastManager的基本概念及其在Android应用内部进行安全且高效的广播通信的方法。LocalBroadcastManager限制了广播只在当前应用内传递,避免了安全性问题,并提高了效率。

1万+

被折叠的 条评论
为什么被折叠?



