广播机制简介


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. IFROG线上赛做过的题目

    #6 1068: 找规律 int main(){ int t,n; cin>>t; while(t--){ cin>>n; ==)printf(); else printf(& ...

  2. git查看和操作commit命令

    git reflog 显示所有branch的commit,包括commit和reset,以及已删除的commit.而git log只显示当前branch的commit,不包括已删除的commit gi ...

  3. TYVJ 1035 / codevs 2171 棋盘覆盖

    Problem Description 给定一个n * m的棋盘,已知某些各自禁止放置,求最多往棋盘上放多少长度为2宽度为1的骨牌(骨牌不重叠) Input 第一行为n,m(表示有m个删除的格子)第二 ...

  4. MySQL使用笔记(四)数据的操作

    By francis_hao    Dec 14,2016 数据的操作包括插入数据记录.更新数据记录和删除数据记录. 插入数据记录 插入单条数据记录 field表示的字段名和value表示数据要一一对 ...

  5. 2016广东工业大学校赛 D题 GDUT-oj1172

    Problem D: 二叉树的中序遍历 Description 对于学过数据结构的人来说,二叉树和二叉树上的中序遍历都是再简单不过的东西了.这道题就搞搞二叉树好了,当然,不是一般的二叉树:) 我们定义 ...

  6. [ST表/贪心] NOI2010 超级钢琴

    [NOI2010]超级钢琴 题目描述 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出n个音符,编号为1至n.第i ...

  7. codeforces 719C. Efim and Strange Grade

    C. Efim and Strange Grade time limit per test 1 second memory limit per test 256 megabytes input sta ...

  8. Git远程仓库的使用(github为例)

    一.           创建SSH key 输入命令“ssh-keygen –t rsa”创建ssh key.   由于笔者pc机已有ssh key,这里不再重复创建覆盖,仅做演示. 笔者创建好的s ...

  9. bzoj 1050: [HAOI2006]旅行comf&&【codevs1001】

    Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求 一条路径,使得路径上最 ...

  10. 在DirectX11下用Stencil Buffer绘制可视化Depth Complexity

    这是一道在<Introduction to 3D Game Programming with DirectX 11>上的练习题. 要求把某个像素点上的Depth Complexity(深度 ...