安卓面经_安卓基础面全解析(3/30)广播全解析
牛客高级系列专栏:
安卓(安卓系统开发也要掌握)
- 想通关安卓面试,请看(承诺免费售后答疑):《150道安卓高频面试题目录及答案链接》
- 想通关安卓系统面试,请看:《140道安卓系统Framework面试题目录及答案链接》
- 想进阶安卓开发,请看(承诺免费售后答疑):《Android进阶知识体系解析_15大安卓进阶必备知识点》
- 想了解安卓APP完整开发流程,请看(承诺免费售后答疑):《安卓APP完整开发流程》
- 想掌握安卓App性能优化,请看(承诺免费售后答疑):《安卓性能优化讲解和实战专栏》
- 想掌握Gradle语法和配置,制作Gradle插件,请看(承诺免费售后答疑):《安卓Gradle语法解析和实践大全》
嵌入式
- 想通关嵌入式面试,请看: 《111道嵌入式面试题目录及答案链接》
- 想多掌握几个嵌入式项目,请看:《6个嵌入式项目交流分享(附源码)》
本人是2020年毕业于广东工业大学研究生:许乔丹,有国内大厂CVTE和世界500强企业安卓开发经验,该专栏整理本人对常见安卓高频开发面试题的理解;
网上安卓资料千千万,笔者将继续维护专栏,一杯奶茶价格不止提供答案解析,承诺提供专栏内容免费技术答疑,直接咨询即可。助您提高安卓面试准备效率,为您面试保驾护航!
正文开始⬇
Broadcast Receiver(广播接受者)是Android四大组件之一,自然是必备知识点。如果面试官问你:
- 请介绍Android里广播的分类?⭐⭐⭐⭐
- 程序A能否接收到程序B的广播?⭐⭐⭐
- 请列举广播注册的方式,并简单描述其区别?⭐⭐⭐⭐⭐
看完以下的解析,面试中一定可以让面试官眼前一亮。
目录
-
1、Broadcast的定义
-
2、Broadcast的注册方式
- 2.1 静态注册
- 2.2 动态注册
- 2.3 静态/动态注册的区别
-
3、Broadcast的分类
- 3.1 普通广播
- 3.2 系统广播
- 3.3 有序广播
- 3.4 本地广播
- 3.4.1 为何更加高效安全
- 3.4.2 如何实现本地广播
- 3.5 粘性广播
-
4、程序A能否接收到程序B的广播
1、Broadcast的定义
Broadcast Receiver是Android四大组件之一,是全局大喇叭,就像以前学校里面的大喇叭一样,有什么事情,就通过广播通知到全校师生。Android的广播机制是一种广泛运用的在应用程序之间传输信息的机制。主要有两大角色:广播接收者和广播发送者。因此,我们可以注册一个广播接收者,用来接收其他进程或者系统发出的广播;同样的,我们也可以通过广播发送者,向其他进程发送我们的广播,告诉其他进程需要做某个动作。
2、Broadcast的注册方式
通过了解Broadcast的注册方式,是了解BroadcastReceiver的用法是最直接有效的,有静态注册和动态注册两种方法。
2.1 静态注册
在AndroidManifest.xml清单文件里直接声明的方式叫做静态注册。
<receiver
//此广播接收者类是mXRReceiver
android:name=".mXRReceiver" >
//用于系统启动完成时,接收系统发送的广播
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
同时附上其他receiver的属性说明:
<receiver
android:enabled=["true" | "false"]
//此broadcastReceiver能否接收其他App的发出的广播
//默认值是由receiver中有无intent-filter决定的:如果有intent-filter,默认值为true,否则为false
android:exported=["true" | "false"]
android:icon="drawable resource"
android:label="string resource"
//继承BroadcastReceiver子类的类名
android:name=".mXRReceiver"
//具有相应权限的广播发送者发送的广播才能被此BroadcastReceiver所接收;
android:permission="string"
//BroadcastReceiver运行所处的进程
//默认为app的进程,可以指定独立的进程
//注:Android四大基本组件都可以通过此属性指定自己的独立进程
android:process="string" >
//用于指定此广播接收器将接收的广播类型
//本示例中给出的是用于系统启动完成时,接收系统发送的广播
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
然后重新onReceive()函数。
public class mXRReceiver extends BroadcastReceiver {
//接收到广播后自动调用该方法
@Override
public void onReceive(Context context, Intent intent) {
//写入接收广播后的操作
}
}
如上面代码,此时注册了mXRReceiver这个广播,当系统启动后,就会发送BOOT_COMPLETED的广播,符合mXRReceiver所设置的过滤条件,就会自动调用onReceive()函数,执行对应内容。
注意:onReceive()函数不能执行耗时流程。
2.2 动态注册
所谓动态注册,就是代码运行到了才注册广播。具体如下:
private void initBroadcastReceiver() {
if (mXRBroadcastReceiver == null) {
mXRBroadcastReceiver
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
#提供免费售后答疑!!花一杯奶茶的钱获得安卓面试答疑服务,稳赚不赔# Android发展已经很多年,安卓资料网上千千万,本专栏免费提供专栏内容技术答疑!!私聊当天必回。在阅读过程或者其他安卓学习过程有疑问,都非常欢迎私聊交流。