详解Android中BroadCastReceiver组件

2019-12-10 18:57:11王旭
public class SecondReceiver extends BroadcastReceiver { 

  private static final String TAG = "NormalBroadcast"; 

  @Override 
  public void onReceive(Context context, Intent intent) { 
    String msg = intent.getStringExtra("msg"); 
    Log.i(TAG, "SecondReceiver: " + msg); 
  } 
} 

public class ThirdReceiver extends BroadcastReceiver { 

  private static final String TAG = "NormalBroadcast"; 

  @Override 
  public void onReceive(Context context, Intent intent) { 
    String msg = intent.getStringExtra("msg"); 
    Log.i(TAG, "ThirdReceiver: " + msg); 
  } 
} 

然后再次点击发送按钮,发送一条广播,控制台打印如下: 

详解Android中BroadCastReceiver组件

看来这三个接收者都接收到这条广播了,我们稍微修改一下三个接收者,在onReceive方法的最后一行添加以下代码,试图终止广播:

abortBroadcast(); 

再次点击发送按钮,我们会发现,控制台中三个接收者仍然都打印了自己的日志,表明接收者并不能终止广播。

有序广播(Ordered Broadcast)

有序广播比较特殊,它每次只发送到优先级较高的接收者那里,然后由优先级高的接受者再传播到优先级低的接收者那里,优先级高的接收者有能力终止这个广播。