1 广播机制简介

Android中的广播主要分为两种类型:标准广播和有序广播。

  • 标准广播(Normal broadcasts)是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在统一时刻接受到这条广播消息,因此它们之间灭有任何先后顺序可言。这种广播的效率会比较高,但同时也意味着它是无法截断。
  • 有序广播(Ordered broadcasts)则是一种同步执行的广播,在广播发出之后,同一时刻只会由一个广播接收器能够收到这条广播,当这个广播接收器的逻辑执行完毕后,广播才会继续传递。所以此时的广播接收器还可以由先后顺序,优先级高的广播接收器就可以先收到广播消息,并且前面的广播接收器还可以截断正在传递的广播。

2 接受系统广播

2.1 动态注册监听网络变化

广播接收器可以自由的对自己感兴趣的广播进行注册,这样当由相应的广播发出时,接收器就能够接受该广播,并在内部处理相应的逻辑。
动态注册:在代码中注册。
静态注册:在AndroidManifest.xml中注册。

动态注册
registerReceiver(BroadcastReceiver broadcastRecevier, IntentFiler intentFiler);
例子:

private IntentFiler intentFiler;
private NetworkChangeReceiver networkChangeReceiver;
ConnectivityManager connectionManager = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);//通过getSystemService()方法得到ConnectivityManager的实例
Network[] network = connectionManager.getAllNetworks();//得到Network实例

tips:
如果程序需要进行一些对用户来说比较敏感的操作,就必须在配置文件AndroidManifest.xml中声明权限。
例如:
系统网络状态权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE“ />

2.2 静态注册实现开机启动

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    
        <receiver
            android:name=".BootCompleteReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>

onReceiver() 方法不能添加过多的逻辑或者进行任何耗时操作,因为广播接收器中不允许开启线程,当onReceiver()方法运行了较长时间而没有结束是,程序就会报错。

3 发送自定义广播

3.1 发送标准广播

3.2 发送有序广播

4 使用本地广播

5 广播的最佳实践——实现强制下线功能