Android 广播机制

目录:

1.广播机制简介

2.接收系统广播

3. 发送自定义广播

4.使用本地广播

5.广播实践 — 实现强子下线功能

6.Git 时间 — 版本控制工具(203)


1.广播机制简介

灵活:Android 每个应用都可以对自己感兴趣的广播进行注册,这样该程序就只会接收到自己所关心的广播内容,广播可能来源于系统,可能来源于其他应用。

Android 提供了一套完整的 API ,允许应用自由地发送和接收广播。

发送广播 — 借助 Intent

接收广播 — 广播接收器 (Broadcast Receiver)

广播类型

标准广播 和 有序广播

标准广播:

完全异步执行的广播,广播发出后,所有广播接收器几乎同时接受此广播消息,因此无先后顺序。

效率高,但无法被截断。

Android 广播机制_第1张图片
标准广播工作示意图

有序广播:

同步执行的广播,广播发出后,同一时刻只会一个广播接收器能收到这条广播消息,当这个广播接收器中的逻辑执行完毕后,广播才继续传递。

所以,此时的广播接收器是有先后顺序的,优先级高的就先接收到广播消息,并且前面的广播接收器可以截断正在传递的广播,这样后面的广播接收器就无法收到广播消息了。

Android 广播机制_第2张图片
有序广播工作示意图

2.接收系统广播

比如  手机开机完成后会发出一条广播,电池电量变化,时间或区域的改变

注册广播的方式一般有两种,在代码中注册(动态注册) 和 在AndroidManifest.xml 中注册(静态注册

如何创建一个广播接收器?  创建一个新的类,让它继承自 Broadcast Receiver ,并重写父类的 onReceive() 方法就行了。  当有广播来时,onReceive() 方法就会得到执行,具体的逻辑就可以在这个方法中处理。

2.1 动态注册监听网络变化

(183)

Android 广播机制_第3张图片

动态注册  的广播接收器可以自由地控制注册与注销,在灵活性方面有很大的优势,缺点是必须要在程序启动后才能接收到广播,因为注册的逻辑是写在 onCreate() 方法中的。

2.2 静态注册实现开机启动

程序未启动就可以接收到广播。

(185)

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

因此,广播接收器更多的是扮演一种打开程序其他组件的角色,比如创建一条状态栏通知,或者启动一个服务等。

3. 发送自定义广播

标准广播 和 有序广播

3.1 发送标准广播

发生广播之前,需先定义一个广播接收器来准备接收此广播才行,新建类(MyBroadcastReceiver),当收到自定义广播时,弹出提示信息。然后在 AndroidManifest.xml 中对广播接收器进行修改。让 MyBroadcastReceiver 接收到一条值为 【com.example.yanchengwei.broadcasttest.MY_BROADCAST】 的广播,因此发广播时就需要发出这样的一条广播。在布局文件中定义一个按钮,作为发送广播的触发点。按钮的点击事件里加入了发送自定义广播的逻辑。首先构建出一个 Intent 对象,并把要发送的广播的值传入,然后调用 Context 的 sendBroadcast() 方法将广播发送出去,这样所有监听 【com.example.yanchengwei.broadcasttest.MY_BROADCAST】 这条广播的广播接收器就会收到消息。

3.2 发送有序广播

android priority  属性给广播接收器设置了优先级,优先级比较高的广播接收器就可以先接收广播

在 onReceive() 方法中调用了 abortBroadcast() 方法,就表示将这条广播截断。

4.使用本地广播

之前的广播属于 系统全局广播,即发出的广播可以被其他任何程序接收到,并且也可以接收来自其他任何应用程序的广播。因此,容易引起安全性问题。

为此,引入一套本地广播机制,使用这个机制发出的广播只能在应用程序的内部进行传递,也只接收来自本地应用发出的广播。

用法:主要使用了一个 LocalBroadcastManager. 来对广播进行管理,并提供了发送广播和注册广播接收器的方法。

本地广播是无法通过静态注册的方式来接收的。

优势:

正在发生的广播不会离开我们的程序,因此不必担心机密数据泄露。

其他程序无法将广播发送到我们程序的内部,因此不需要担心会有安全漏洞的隐患。

发送本地广播比发送系统全局广播更加高效。

5.广播实践 — 实现强子下线功能


6.Git 时间 — 版本控制工具(203)




以上


写在最后:

沉思放在晚上,现在只想说一句:音乐真的有奇妙的治愈能力

还有一个核心要点,首先你要对你自己有自信,即使学校那边不放,也不要太懊恼失去了如此好的转正机会,有失必有得,有得必有失。起码一个多月,成长了好多,明确了很多东西,正视了爱情观,嗯,不要把自己的负面情绪传达给宝宝,自己消化,给她看到一个自信满满靠谱十足的你自己!让她对你有期待,而你,也允过她,会来找她的。

嗯,她说过:你可一定要来啊。嗯,我答应腻。


你可能感兴趣的:(Android 广播机制)