LocalBroadCastManager也是广播的一种,但不同的是BroadCastReceiver用于不同进程间通信,总体来说适用于安全性要求不太高的数据传递,而LocalBroadCastManager适用于应用内部的信息传递,又称之为局部通知管理器。
LocalBroadCastManager在android-support-v4.jar(这个相信大家都不陌生)中引入,有效率高,安全性高,可代替Thread与Handle组合刷新UI等优点。
示例代码:
public class MainActivity extends Activity {
/**
* 定义三个Action状态
*/
static final String ACTION_STARTED = "com.example.android.supportv4.STARTED";
static final String ACTION_UPDATE = "com.example.android.supportv4.UPDATE";
static final String ACTION_STOPPED = "com.example.android.supportv4.STOPPED";
LocalBroadcastManager mBroadCastManager;
BroadcastReceiver mBroadCastReceiver;
TextView mTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init(){
mTextView = (TextView) this.findViewById(R.id.showText);
mBroadCastManager = LocalBroadcastManager.getInstance(this);
IntentFilter filter = new IntentFilter();
filter.addAction(ACTION_STARTED);
filter.addAction(ACTION_UPDATE);
filter.addAction(ACTION_STOPPED);
mBroadCastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(ACTION_STARTED)){
mTextView.setText("Start !");
} else if(intent.getAction().equals(ACTION_UPDATE)){
mTextView.setText(intent.getExtras().get("update").toString());
} else if(intent.getAction().equals(ACTION_STOPPED)){
mTextView.setText("Stoppppp !");
}
}
};
/**
* 注册LocalBroadCastManager
*/
mBroadCastManager.registerReceiver(mBroadCastReceiver,filter);
/**
* 开启线程传递数据
*/
new Thread(new Runnable() {
@Override
public void run() {
Intent myIntent = new Intent(ACTION_UPDATE);
myIntent.putExtra("update","LaLaLa");
mBroadCastManager.sendBroadcast(myIntent);
}
}).start();
}
@Override
protected void onStop() {
super.onStop();
/**
* 取消LocalBroadCastManager
*/
mBroadCastManager.unregisterReceiver(mBroadCastReceiver);
}
}