(转)LocalBroadcastManager简介

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注册。

 

以上部分内容转载或参考来源如下:
http://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html
在此表示感谢。
转载请注明来源,版权归原作者所有,未经同意严禁用于任何商业用途。
微博:http://weibo.com/theworldsong
邮箱:theworldsong@foxmail.com

posted on 2015-01-29 17:42  Rocky_Lin  阅读(268)  评论(0)    收藏  举报