广播机制简介


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. Eclipse打不开,闪退

    自己编写了个程序,运行巨慢..无语,输出太多,后来冒出一个错误,不知什么原因啊,再后来Eclipse就打不开了,到workbench闪退... 百度后解决方案: 进入目录:workspace/.met ...

  2. STL map、set中key为结构体的用法

    下面是map定义的结构: // TEMPLATE CLASS map template<class _Kty, class _Ty, class _Pr = less<_Kty>, ...

  3. [Leetcode] Reverse nodes in k group 每k个一组反转链表

    Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. If ...

  4. [Leetcode] Path Sum路径和

    Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all ...

  5. 打砖块(codevs 1257)

    题目描述 Description 在一个凹槽中放置了n层砖块,最上面的一层有n块砖,第二层有n-1块,……最下面一层仅有一块砖.第i层的砖块从左至右编号为1,2,……i,第i层的第j块砖有一个价值a[ ...

  6. 【poj3734】矩阵乘法

    题解: 若当前有i个格子.2个是偶数的方案数为a[i]1个是偶数的方案数为b[i]0个是偶数的方案数为c[i] a[i+1]=2*a[i](i+1染成黄或蓝)+b[i](把奇数变为偶数)b[i+1]= ...

  7. Docker原理 -- namespace与CGroup

    命名空间 PID(Process ID) 进程隔离 NET(Network) 管理网络隔离 IPC(InterProcess Communication) 管理跨进程通信的访问 MNT(Mount) ...

  8. 【洛谷 P1653】 猴子 (并查集)

    题目链接 没删除调试输出,原地炸裂,\(80\)->\(0\).如果你要问剩下的\(20\)呢?答:数组开小了. 这题正向删边判连通性是很不好做的,因为我们并不会并查集的逆操作.于是可以考虑把断 ...

  9. [bzoj3994][SDOI2015]约数个数和-数论

    Brief Description 计算\(\sum_{i\leqslant n}\sum_{j\leqslant m}\sigma_0(ij)\). Algorithm Design 首先证明一个结 ...

  10. C# 反射 名称不区分大小写

    一 Type type = Type.GetType(className,false,true); //第一个是“类型的全名”,第二个参数:找不到时触发异常,第三个参数:寻找的时候是否忽略大小写 二 ...