Android《第一行代码》第5章 笔记

第五章主要介绍了Android中的广播机制。

Android中的每个应用程序都可以对自己感兴趣的广播进行注册。Android允许应用程序自由地发送和接收广播。可以通过Intent发送广播,通过广播接收器(Broadcast Receiver)来接收广播。

广播类型分为标准广播有序广播。标准广播是一种完全异步执行的广播,广播发出后,所有广播接收器几乎会在同一时刻接收到这条广播消息,没有先后顺序,无法被截断。有序广播 是一种同步执行的广播,广播发出后,同一时刻只会有一个广播接收器能收到这条广播消息,这个广播接收器中的逻辑执行完毕后,广播才会继续传递。广播接收器是有先后顺序的,优先级高的广播接收器可以先收到广播消息,并且前面的广播接收器还可以截断正在传递的广播,这样后面的广播接收器就无法收到广播消息。

注册广播有两种方法,一种是动态注册,指在代码中注册,一种是静态注册,在AndroidManifest.xml中注册。动态注册是先定义一个类继承自BroadcastReceiver,重写父类的onReceive()方法,再在活动的onCreate()方法中创建了一个IntentFilter的实例,用addAction()方法添加一个action值,指定广播接收器想要监听什么广播,再创建一个之前定义好的类的实例,调用registerReceiver()方法进行注册,将刚才类的实例和IntentFilter的实例都传进去即可。在onDestroy()方法中调用unregisterReceiver()方法可以取消注册。Android系统为了保证应用程序的安全性做了规定,如果程序需要访问一些系统的关键性信息,必须在配置文件中声明权限才可以,否则程序会直接崩溃,比如查询网络状态就需要声明权限。动态注册的广播接收器可以自由地控制注册和注销,在灵活性上有很大优势,但它必须在程序启动后才能接收到广播,用静态注册的方法可以在程序未启动时接收到广播。即还是自定义一个类继承BroadcastReceiver(),然后在AndroidManifest.xml中的<application>标签中使用<receiver>标签,用android:name指定注册哪个广播接收器,在<intent-filter>标签里加入想要接收的广播即可。

不要在onReceive()方法中添加过多的逻辑或进行任何的耗时操作,因为在广播接收器中是不允许开启线程的。广播接收器更多的是扮演打开程序其他组件的角色,比如创建一条状态栏通知,或者开启一个服务等。

发送标准广播时先构建一个Intent对象,将要发送的广播值传入,调用Context的sendBroadcast()方法将广播发送出去即可。

发送有序广播只需将sendBroadcast()方法改成sendOrderedBroadcast()方法,第一个参数仍然是Intent,第二个参数是与权限相关的字符串,传入null即可。可以通过android:priority给广播接收器设置优先级,优先级比较高的广播接收器就可以先收到广播。在onReceive()方法中调用abortBroadcast()方法,就表示将这条广播截断。

之前发送和接收的广播都属于系统全局广播,即发出的广播可以被任何程序接收到。Android还有一套本地广播机制。使用LocalBroadcastManager的getInstance()方法得到它的一个实例,调用它的registerReceiver()方法注册广播接收器,发送广播时也是调用它的sendBroadcast()方法,即可实现本地广播在本应用程序内传播。本地广播无法通过静态注册的方式来接收。

可以通过广播来实现强制下线功能。因为被通知强制下线时我们可能处于任何一个界面,所以可以借助广播来实现。

本章最后简单地介绍了Git的安装及创建代码仓库和提交本地代码。Git是一个开源的分布式版本控制工具。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值