Broadcast大致机制流程:
1. 广播接受者BroadcastReceiver通过Binder机制向AMS(AndroidManagerService)进行注册;
2. 广播发送者通过Binder机制向AMS发送广播;
3. AMS查找符合条件(IntentFilter/Permission等)的BroadcastReceiver,将广播发送到BroadcastReceiver(一般情况下时Activity)对应的消息循环队列中;
4. 消息循环执行拿到此广播,回调BroadcastReceiver中的onReceive方法。

Broadcast注册方式:
首先注册者都要新建继承BroadcastReceiver的接收器,在onReceive中实现接收广播后代码。

public class TestBroadCastReceiver extends BroadcastReceiver {
    private static final String TAG = "TestBroadCastReceiver";

    @Override
    public void onReceive(Context context, Intent intent) {
        String name = intent.getStringExtra("name");
        Log.d(TAG,name);
    }
}

然后分两种方式注册广播:
一、动态注册

//动态注册广播
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BROADCAST_ACTION);
registerReceiver(new MyBroadCastReceiver(),intentFilter);

二、静态注册

<receiver android:name=".TestBroadCastReceiver">
        <intent-filter>
            <action android:name="com.github.liujianwj.broadcasetes"/>
        </intent-filter>
</receiver>

两种注册方式区别:
-动态注册的生命周期和程序的生命周期一致,程序关闭后,动态注册的广播便不能接收到广播。
-静态注册是当程序关闭后,如果有广播过来,还能接收到广播。

两种注册方式优缺点比较:
动态注册:
- 优点:在Android广播机制中,动态注册的优先级高于静态注册的优先级。
- 缺点:注册广播的Activity关闭,广播也就无法接收。

静态注册:
- 优点:一旦注册,无需担心广播接收器是否关闭,只要设备处于开启状态,广播就能接收。
- 缺点:优先级较低

发送广播方式:
一、普通广播:无序全局广播

Intent intent = new Intent();
intent.setAction(BROADCAST_ACTION);
intent.putExtra("name","刘坚");
sendBroadcast(intent);

setAction 中设置对应广播接收器的filter-action即可。
sendBroadcast(intent)/sendBroadcast(intent, receiverPermission)/sendBroadcastAsUser(intent, userHandler)/sendBroadcastAsUser(intent, userHandler,receiverPermission)。
二、系统广播:由系统内部在特定事件发生时自动发出
三、有序广播:发出去的广播,接收者按照顺序接收
sendOrderedBroadcast(intent, receiverPermission, …)。
四、应用内广播:APP应用进程内发送和接收
使用方式上与通常的全局广播几乎相同,只是注册/取消注册广播接收器和发送广播时将主调context变成了LocalBroadcastManager的单一实例。

注意点:
- exported属性默认为true,可设置为false,使广播只在该进程内接收。
- 通过intent.setPackage(packageName)指定在,这样此广播将只会发送到此包中的App内与之相匹配的有效广播接收器中。