广播机制简介


Android的广播可以分为两种类型的,标准广播和有序的广播;

标准广播:  是一种完全异步执行的广播,在广播发出去之后,所有的广播接收器几乎是同一时接收到这条广播。

有序广播:  是一种完全同步执行的广播,在广播发出去之后,同一时刻只有一条消息能接收到这条广播。当这个广播接收器中的逻辑执行完毕之后,广播才会继续传递,所以这个时候的广播接收器是有先后顺序的,优先级高的广播接收器就可以先接收到广播消息,并且前面的广播接收器还可以截断正在传递的广播,这样的话后面广播接收器就不能接收到广播消息了。

动态注册监听网络变化


下面通过做一个监听网络变化的例子,好好理解一下广播。

注册广播的方式有两种,在代码中注册和在AndroidManifest.xml中注册,其中前者也被称为 动态注册 后者也被称为 静态注册。

那么该如何创建一个广播接收器呢?其实也很简单,让它继承自 BroadcaseReceiver ,并重写父类的 onReceive() 方法就行了,这样当有消息来临的时候onReceive()方法得到执行。具体的接收到广播之后的逻辑就可以在这里处理了。

1、在getSystemService这个方法里,代码没有截取完整,完整的代码是 context.CONNECTIVITY_SERVICE

2、系统为了保护用户的隐私安全,是需要我们获取一下网络权限的,这个就是 Androidmanifest.xml 文件中注册

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

注意它和application标签是同级的,不是包含的application标签里面的

静态注册 


上面我们说的是动态的注册,我们可以看到动态注册广播接收器可以自由的控制它的注册和销毁,很是灵活,但是我们想一下有这样的一个场景,我们的动态注册都是在onCreate()方法里面的,那有没有在程序还没有启动的情况下就能接收到广播呢?答案是当然可以,这就需要我们使用静态注册,也是我们接下来需要写的静态注册。

它的创建方法如下:

1、创建的路劲如下   File - New - Other 你就能看到 Broadcast Receiver

2、Exported 表示是否允许这个广播接收本程序以外的广播

3、Enable 表示是否启用这个广播

创建之后我们需要写的代码全都在AndroidManifest.xml中,里面涉及到的问题以及都在下面的代码中:

另外:我们创建的StaticReceiver里面的代码我们就不看了,也就是一个onReceive方法,有一点需要我们注意的,不管是静态还是动态都需要我们注意的点是:

      注意一下,onReceive方法里面不要写过多的逻辑代码或者换进行其他的耗时操作、因为在广播接收器中是不允许开始新的线程的,要是这个方法长时间的没有响应,程序就会报错。

发送广播


发送广播这里我们就直接看看代码是怎样发送标准广播和有序广播的。

还要一个本地广播我们代码是写在一起,那本地广播是用来干什么的呢?不知道是否还记得前面我们说的静态注册广播可以接收其他应用程序的广播,这样就降低的程序的安全性,容易引发安全问题!为了解决这个问题,安卓就引入了本地广播的概念,本地广播就是发出的广播只能够在程序的内部进行床底,并且广播接收器也只能来接收来自本应用程序发出的广播,提高了程序的安全性!

我们这里就只写了注册以及发送,注册这部分就不在写了,还是在我们的onDestroy方法里面注销。

下面这里还有一点需要我们注意的,就是有序广播发出之后,接收器的优先级的问题,代码如下:

上面就是我们总结的关于安卓广播通知的问题!

Android学习--广播机制的更多相关文章

  1. android学习-IPC机制之ACtivity绑定Service通信

    bindService获得Service的binder对象对服务进行操作 Binder通信过程类似于TCP/IP服务连接过程binder四大架构Server(服务器),Client(客户端),Serv ...

  2. 九、Android学习第八天——广播机制与WIFI网络操作(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 九.Android学习第八天——广播机制与WIFI网络操作 今天熟悉了An ...

  3. Android学习笔记(广播机制)

    1.Android的广播机制介绍 收听收音机也是一种广播,在收音机中有很多个广播电台,每个广播电台播放的内容都不相同.接受广播时广播(发送方)并不在意我们(接收方)接收到广播时如何处理.好比我们收听交 ...

  4. Android之 广播

    (以下内容是阅读郭霖大神的<第一行代码>后自己总结的) 1.概述 广播是Android的四大组件之一. Android的广播机制十分灵活. 2.发送广播 如上图Android的广播主要分为 ...

  5. Android:日常学习笔记(9)———探究广播机制

    Android:日常学习笔记(9)———探究广播机制 引入广播机制 Andorid广播机制 广播是任何应用均可接收的消息.系统将针对系统事件(例如:系统启动或设备开始充电时)传递各种广播.通过将 In ...

  6. Android广播机制的深入学习

    部分内容转载自http://www.cnblogs.com/lwbqqyumidi/p/4168017.html 1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者 ...

  7. Android(java)学习笔记172:BroadcastReceiver之 Android广播机制

    Android广播机制 android系统中有各式各样的广播,各种广播在Android系统中运行,当"系统/应用"程序运行时便会向Android注册各种广播.Android接收到广 ...

  8. Android学习总结——本地广播机制

    为了简单解决广播的安全性问题,Android引入了一套本地广播机制,使用这个机制发出的广播只能在程序的内部进行传递,只能接受来自本应用程序发出的广播.否则当我们发送一些携带关键数据的广播可能被截获,一 ...

  9. Android学习之基础知识八—Android广播机制

    一.广播机制简介 Android提供了一套完整的API,允许应用程序自由的发送和接受广播,发送广播借助于我们之前学过的:Intent,而接收广播需要借助于广播接收器(Broadcast Receive ...

随机推荐

  1. JAVA 异常处理的认知学习过程

    没有异常处理 学生时代,我编写的java代码中,很少会有try catch.最主要的原因如下: 应用的规模很小 没有不确定因素 代码可控性高 如果规模小,往往就没有复杂的逻辑链路,整个软件的分层也很浅 ...

  2. [NOI2017 D1T1]整数

    题目大意:有一个整数 $x$ ,一开始为 $0$ .有 $n$ 个操作,有两种类型: $1 \;a\; b$:将 $x$ 加上整数 $a\cdot 2^b$ ,其中 $a$ 为一个整数, $b$ 为一 ...

  3. BZOJ 2502: 清理雪道 | 有上下界最小流

    #include<cstdio> #include<algorithm> #include<cstring> #include<queue> #defi ...

  4. BZOJ2257 [Jsoi2009]瓶子和燃料 【裴蜀定理】

    题目链接 BZOJ2257 题解 由裴蜀定理我们知道,若干的瓶子如此倾倒最小能凑出的是其\(gcd\) 现在我们需要求出\(n\)个瓶子中选出\(K\)个使\(gcd\)最大 每个数求出因数排序即可 ...

  5. JSONP以及Spring对象MappingJacksonValue的使用方式

    什么是JSONP?,以及Spring对象MappingJacksonValue的使用方式 原文: https://blog.csdn.net/weixin_38111957/article/detai ...

  6. 从零开始学习MXnet(一)

    最近工作要开始用到MXnet,然而MXnet的文档写的实在是.....所以在这记录点东西,方便自己,也方便大家. 我觉得搞清楚一个框架怎么使用,第一步就是用它来训练自己的数据,这是个很关键的一步. 一 ...

  7. Codeforces Round #535 (Div. 3) 题解

    Codeforces Round #535 (Div. 3) 题目总链接:https://codeforces.com/contest/1108 太懒了啊~好久之前的我现在才更新,赶紧补上吧,不能漏掉 ...

  8. idea初学建立maven项目报错

    原理,是因为你没把新创建好的maven项目给设置成一个可被tomcat部署的web项目 参考此博文,讲的非常详细: 归根到底是因为web项目的部署问题: 解决方案:在创建的到时候,idea下部会提示是 ...

  9. 使用命令wsimport生成WebService客户端

    使用命令wsimport生成WebService客户端 wsimpost命令有几个重要的参数: -keep:是否生成java源文件    -d:指定输出目录    -s:指定源代码输出目录    -p ...

  10. C++开源库,欢迎补充。

    转载自:http://blog.csdn.net/kobejayandy/article/details/8681741 C++在"商业应用"方面,曾经是天下第一的开发语言,但这一 ...