Android LocalBroadcastManager 与 BroadcastReceiver

Android中BroadcastReceiver主要用途有

发送通知,更新UI或者数据,应用程序间相互通信,监听系统状态(比如开机,网络等)

Android中发送广播的方式:

普通广播:无论优先级大小,将发送给所有监听Action="com.test.sample.action"的广播,内容不可被修改,无传递性。

1 Intent intent = new Intent( "com.test.sample.action");
2 sendBroadcast(intent);

异步(黏性)广播: 当处理完之后的Intent ,依然存在,这时候registerReceiver(BroadcastReceiver, IntentFilter) 还能收到他的值,直到你把它去掉 , 无传递性 , 无法终止(abort())广播。

发这个广播需要权限<uses-permission android:name="android.permission.BROADCAST_STICKY" />

去掉是用这个方法removeStickyBroadcast(intent); 但别忘了在执行这个方法的应用里面 AndroidManifest.xml 同样要加上面的权限;

1 sendStickyOrderedBroadcast(intent, resultReceiver, scheduler,
2        initialCode, initialData, initialExtras)

有序广播:按照接收者的优先级顺序接收广播 , 优先级别在 intent-filter 中的 priority 中声明 ,-1000 到1000 之间 ,值越大 优先级越高 。可以终止广播意图的继续传播 , 接收者可以篡改内容,具有传递性。

1 sendBroadcast(intent);

注意:安全性都不太好,因此只适用于安全性较低的数据传递,或者页面更新。

所以android在android-support-v4.jar中引入了LocalBroadcastManager,称为局部通知管理器,这种通知的好处是安全性高,效率也高,适合局部通信,可以用来代替Handler更新UI

对于普通:registerReceiver(); registerReceiver();

// Activity:

// 声明 LocalBroadcastManager
LocalBroadcastManager  mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
// 声明 BroadcastReceiver 
BroadcastReceiver mReceiver new BroadcastReceiver() {
   @Override
   public void onReceive(Context context, Intent intent) {
    // Todo
  }
};
// 注册
mLocalBroadcastManager.registerReceiver(mReceiver, filter);

// Service:

1 // 声明 LocalBroadcastManager 
2 LocalBroadcastManager mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
3 //  sendBroadcast 
4 mLocalBroadcastManager.sendBroadcast(new Intent(ACTION_FLAG));

 

posted @ 2015-09-28 17:44  晕菜一员  阅读(849)  评论(0编辑  收藏  举报