Android事件传递三部曲:本地广播LocalBroadcastManager
我们都知道Android的四大组件,分别是:Activity, Service,ContentProvider以及BroadcastReceiver,实际开发中前两者接触的更多一点,后面两个虽然不怎么常用但是偶尔也会接触到,今天我们要说的就和BroadcastReceiver有关,当我们想要去使用BroadcastReceiver会看到官方的提示:如果你不需要应用间的通信,可以考虑使用LocalBroadcastManager,会有更高的执行效率,因为它不涉及进程间通讯,而且不用担心普通广播可能产生的一些安全性问题, LocalBroadcastManager是何许人也,听着好像是普通广播的阉割版,实际使用上看,他们确实有些相似,只是LocalBroadcast不能实现跨进程,但当我们揭开它神秘面纱,你就会发现,它其实和普通的广播一点关系都没有,如果非得扯出点关系的话,那就是他们都借助了BroadcastReceiver这个类来担当receiver的角色, 基本使用 如果你之前有使用过普通的广播,你会发现在方法调用上,LocalBroadcastManager和普通的广播是一模一样,不同的LocalBroadCastManager的调用方不再是context,而是LocalBroadCastManager的实例,所以所有的逻辑都是在LocalBroadCastManager的掌控之内。首先,我们还是从最基本的使用场景出发,从最基本的使用方法开始跟踪,看它是怎么将消息传递的: public class Test extends Activity { private static final String ACTION = "simple_action"; private static final String DATA = "data"; BroadcastReceiver mReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 新建一个receiver mReceiver = new MyReceiver(); // 注册receiver LocalBroadcastManager.getInstance(this) .registerReceiver(mReceiver, new IntentFilter(ACTION)); // 发送消息 Intent messageIntent = new Intent(ACTION); messageIntent.putExtra(DATA, "给xxx的一封信"); LocalBroadcastManager.getInstance(this).sendBroadcast(messageIntent); } @Override protected void onDestroy() { // 取消注册 LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver); } class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 处理消息 Log....