广播比较简单就不写代码了,写点知识点吧
1.广播的类型
- 有序广播:同步执行的广播,有序是相对于接收器来说的,就是同一时刻只会有一个广播接收器能够收到这条广播消息,当这个广播接收器执行完了之后,广播才会继续传递或者被截断()不在传递),优先级高的接收器先收到广播。
- 标准广播:广播发出之后,所有广播接收器都会在同一时间接收到广播,不会有明显的接受顺序。
2.广播的来源
- 系统广播,系统内置了很多广播(开机,网络,电量巴拉巴拉拉),这种广播可以直接在广播接收器里接受处理。
- 自定义广播,就是自己定义的一些广播,比如你的应用登陆了啊,其他地方收到你的登陆广播之后会相应的做一些处理。
3.广播接收器
四大组件之一,主要方法就是 onreceieve 方法,收到广播之后就会调用这个方法。
广播的注册分为动态注册和静态注册。
静态注册就是注册manifest文件里,像注册activity,service,contentprovider一样,同时最好设intent filter,因为你并不需要接受手机里所有的广播(系统的,自己的,别人的),设置里intent-filter之后,你就会只能收到你感兴趣的广播了。另外,静态广播不需要启动应用就能接受广播了,比如开机广播(国产厂商需要设置允许开机启动才行,所以国产手机实现开机启动很难。某些大厂的全家桶除外)
动态注册。同样需要继承实现broadcastReciver,然后需要在activity里new,然后调用registerReceiver方法注册广播,同时,需要在ondestory 方法里调用unregister方法。不然会崩溃(貌似)。动态广播需要启动应用直到注册了之后广播接收器才能接收到广播。
4. 发送广播
没啥意思,说白就是用intent,new intent 的时候setaction,这个action你还要注册到广播接受器里。然后调用sendbroadcast(Intent)
方法,发送有序的广播sendOrderedBroadcast()
,根据manifest里设置的优先级决定广播接收器的执行顺序。
对于接收同一个广播,在相同优先级的情况下:
- 动态注册优先级别高于静态注册。在动态注册中,
- 最早动态注册优先级别最高;
- 在静态注册中,最早安装的程序,静态注册优先级别最高
5 本地广播
前面说的广播全部属于系统全局广播,发出的广播可以被任何应用接受并处理,也可以接受到其他应用发送的广播(action 对应上的)
使用本地广播机制发出的广播,只能在应用内被处理,同事也只能接受应用发出的广播。其实发送和接受的操作都一样,只是发起者不是activity 了,而是这个东西
private LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(getContext());
通过它注册的广播接收器,发送的广播就只能在应用内部传递了。
广播的话,差不多这个样子也就够用了,关于更多广播,参考如下
四大组件-广播
Android总结篇系列:Android广播机制