为什么说Android中的广播机制更加灵活呢?这是因为Android中的每个应用程序都可以对自己感兴趣的广播进行注册,这样该程序就只会接收到自己所关心的广播内容,这些广播可能是来自于系统的,也可能是来自于其他应用程序的。Android提供了一套完整的API,允许应用程序自由地发送和接收广播。发送广播的方法其实之前稍微提到过,如果你记性好的话就会有印象,就是借助我们第二章学习过的Intent,而接收广播的方法则需要引入一个全新的概念——广播接收器
Android中的广播主要可以分为两种类型 :标准广播和有序广播。
标准广播是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在同一时间接收到这条广播消息,因此它们之间没有任何先后顺序可言。这种广播的效率会比较高,但同时也意味着它是无法被截断的。标准广播的工作流程如图所示
有序广播则是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够收到这条广播消息,当这个广播接收器中的逻辑执行完毕后,广播才会继续传递。所以此时的广播器是有先后顺序的,优先级高的广播接收器就可以先收到广播消息,并且前面的广播接收器还可以截断正在传递的广播,这样后面的广播接收器就无法收到广播消息了。有序广播的工作流程如图所示。
接收系统广播:
Android内置了很多系统级别的广播,我们可以在应用程序中通过监听这些广播来得到各种系统的信息状态。比如手机开机完成后就会发出一条广播,电池的电量发生变化也会发出一条广播,时间或者时区发生改变也会发出一条广播,等等。如果想要接收到这些广播,就需要使用广播接收器,下面我们就来看一下它的具体用法。
动态注册监听网络变化
广播接收器可以自由地对自己感兴趣地广播进行注册,这样当有相应地广播发出时,广播接收器就能够接收到该广播,并在内部处理相应地逻辑。注册广播地方式一般有两种,在代码中注册和在AndroidMainfest.xml中注册,其中前者也被称为动态注册,后者也被称为静态注册
那我们就通过动态注册的方式编写一个能够监听网络变化的程序
静态注册实现开机启动
动态注册的广播接收器可以自由的注册与注销,在灵活性方面有很大的优势,但是也存在着一个缺点,那就是必须要在程序启动后才能接收到广播。如果要在程序未启动的情况下接收到广播,就需要使用静态注册的方式
这里让我们准备让程序接收到一条开机广播,当收到这条广播时就可以在onReceive()方法里执行相应的逻辑,从而实现开机启动的功能,可以使用Android Studio 提供的快捷方式来创建一个广播接收器,右击,会弹出一个窗口
注意!!!
不要在onReceive()方法中添加过多的逻辑或者进行任何的耗时操作,因此在广播接收器中是不允许开启线程的,当onReceive()方法运行了较长的时间而没有结束,程序就会报错。因此广播接收器过多的是扮演一种打开程序其他组件的角色,比如创建一条状态栏通知,或者启动一个服务等
发送自定义广播
1.发送标准广播
发送广播之前,我们还需要定义一个广播接收器来准备接收此广播才行,不然发出去也是白发
然后在AndroidMainifest.xml中对这个广播接收器进行修改
然后修改activity_main
然后修改MainAcitvity中的代码
发送有序广播
广播是一种可以跨进程的通信方式,因此在我们应用程序内发出的广播,其他的应用程序应该也是可以收到的,为验证着一点,我们再创建一个项目
使用本地广播
前面我们发送和接收的广播全部属于系统全局广播,即发出的广播可以被其他任何应用程序接收到,并且我们也可以接收到来自于其他任何应用程序的广播。这样就很容易引起安全性的问题,比如说我们发送的一些携带关键性数据的广播有可能被其他的应用程序截获,或者其他的程序不停地向我们地广播接收器里发送各种垃圾广播。
广播地最佳实践——实现强制下线功能
Git时间--初识版本控制工具
创建代码仓库
配置身份 命令如下所示
git config --global user.name "****" ***为打入名字
git config --global user.email "***@**.com" ***为邮箱地址
配置完成后还可以使用同样的命令来查看是否配置成功,只需要将最后的名字呵邮箱去掉即可。
然后尝试给BroadcastBestPractice2项目建立一个代码仓库。先进入到BroadcastBestPractice2项目目录下 进入方式如图
然后就进入到了项目目录下
然后在这个目录下输入命令
git init
只需这一行命令就可以完成创建代码仓库的命令
仓库创建完成后,会在BroadcastBestPractice2项目的根目录下生成一个隐藏的.git文件夹,这个文件夹就是用来记录本地所有的Git操作的,可以通过ls -al命令来查看
提交本地代码
代码仓库建立完成后就可以提交代码
用add命令把想要提交的代码添加进来
用commit命令执行提交操作。比如我们想添加build.gradle文件 就可以输入如下命令
git add build.gradle
如果想添加某个目录,例如添加app目录,就可以输入如下命令
git add app
一次性添加所有的命令如下
git add .
现在BroadcastBestPractice2项目下的所有文件都已经添加好了,我们可以来提交一下,输入如下命令
git commit -m "First commit."
注意 在commit命令的后面,一定要通过-m参数来加上提交的描述信息,没有描述信息的提交被认为是不合法的。