广播机制简介


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. Visio中设置自定义属性的值

    ShapeSheet中User-Define Cells中Prompt格. 帮助解释为:为用户定义的单元格指定说明性提示或注释.应用程序自动将提示文本用引号 (" ") 引起来,以 ...

  2. [Leetcode] Linked list cycle ii 判断链表是否有环

    Given a linked list, return the node where the cycle begins. If there is no cycle, returnnull. Follo ...

  3. [COGS 2421] [HZOI 2016] 简单的Treap 笛卡尔树

    笛卡尔树就是你给两维限制,一维堆R,一维二叉搜索树K,平地拔起一棵Treap,最广范的应用:用LCA求区间最值,建Treap,还有个什么范围top k我表示并不会查都查不到.它最妙最高的地方在于用栈来 ...

  4. 解析Mybaits的insert方法返回数字-2147482646的原因

    前言:前几天在做项目demo的时候,发现有一个很奇怪的现象,就是MyBatis发现更新和插入返回值一直为"-2147482646".无论怎么改,这个值一直不变...是在摸不着头脑, ...

  5. angular js 自定义添加依赖

    代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  6. 前端面试js题

    var a=10; (function(){ console.log(a); var a=100; })(); 结果:输出undefined 解释: function中有var a=100; 声明会提 ...

  7. MAC电脑密码破解

    [第一个方法] 开机,启动时按cmd+S,进入Single User Mode,出现像DOS一样的提示符#root> 在#root>下输入(注意空格,大小写)   fsck -y moun ...

  8. 【Atcoder】ARC 080 F - Prime Flip

    [算法]数论,二分图最大匹配 [题意]有无限张牌,给定n张面朝上的牌的坐标(N<=100),其它牌面朝下,每次操作可以选定一个>=3的素数p,并翻转连续p张牌,求最少操作次数使所有牌向下. ...

  9. [bzoj1208][HNOI2004]宠物收养所——splay

    题目大意 Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发 ...

  10. CVE-2016-6662 利用条件

    首先执行SET GLOBAL 需要超级用户权限,所以利用条件要么用户本身是超级用户要么用户有trigger权限,通过创建trigger,由超级用户触发SET GLOBAL. 然而MYsql有个通过fi ...