LocalBroadcastManager本地广播处理

本文介绍了LocalBroadcastManager的基本概念及其在Android应用内部进行安全且高效的广播通信的方法。LocalBroadcastManager限制了广播只在当前应用内传递,避免了安全性问题,并提高了效率。

转自: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

[java]  view plain copy print ?
  1. public class MainActivity extends Activity {  
  2.     Button button1;  
  3.     MyBroadcastReceiver myBroadcastReceiver;  
  4.     LocalBroadcastManager lbm;  
  5.   
  6.     @Override  
  7.     protected void onCreate(Bundle savedInstanceState) {  
  8.         super.onCreate(savedInstanceState);  
  9.         setContentView(R.layout.activity_main);  
  10.   
  11.         /* 
  12.          * LocalBroadcastManager为单例模式 
  13.          * 在应用程序任何地方均可调用LocalBroadcastManager.getInstance(context)获取唯一实例 
  14.          * 如果想要用于接收广播 
  15.          * 那么就要将LocalBroadcastManager定义在有效的生命周期内 
  16.          */  
  17.         lbm = LocalBroadcastManager.getInstance(this);  
  18.           
  19.         myBroadcastReceiver = new MyBroadcastReceiver();  
  20.           
  21.         IntentFilter filter = new IntentFilter();    
  22.         filter.addAction("com.plusjun.test.hahaha");  
  23.           
  24.         //注册接收器以及过滤规则  
  25.         lbm.registerReceiver(myBroadcastReceiver, filter);  
  26.           
  27.         button1 = (Button)findViewById(R.id.button1);  
  28.         button1.setOnClickListener(new OnClickListener() {  
  29.             @Override  
  30.             public void onClick(View v) {  
  31.                 Intent intent = new Intent();      
  32.                 intent.setAction("com.plusjun.test.hahaha");      
  33.                 intent.putExtra("name""plus");   
  34.                 //发送广播  
  35.                 lbm.sendBroadcast(intent);  
  36.             }  
  37.         });  
  38.     }  
  39.       
  40.     @Override  
  41.     protected void onDestroy() {  
  42.         super.onDestroy();  
  43.         //别忘了解除接收器  
  44.         lbm.unregisterReceiver(myBroadcastReceiver);  
  45.     }  
  46. }  

MyBroadcastReceiver

[java]  view plain copy print ?
  1. public class MyBroadcastReceiver extends BroadcastReceiver {  
  2.   
  3.     @Override  
  4.     public void onReceive(Context context, Intent intent) {  
  5.         String str = intent.getStringExtra("name");  
  6.         sLog(str);  
  7.     }  
  8.       
  9.     private void sLog(String str) {  
  10.         Log.i("MyBroadcastReceiver", str);  
  11.     }  
  12. }  

和 BroadcastReceiver 注册与发送广播差不多,只是调用对象从 Activity 换成了 LocalBroadcastManager。

注意,LocalBroadcastManager 接收器只能通过代码注册(动态注册),不存在 BroadcastReceiver 的那种AndroidManifest注册。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值