全面升级Android面试之Broadcast receiver面试题集
来源:互联网 发布:python改变turtle颜色 编辑:程序博客网 时间:2024/06/08 12:15
1.广播定义
在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制,Android中我们要发送的广播内容是一个Intent,这个Intent中可以携带我们要传输的数据
2.广播的使用场景
A.同一个app具有多个进程的不同组件之间的消息通信
B.不同的app之间的组件消息通信
3.广播种类
1)Normal Broadcast:Context.sendBroadcast
2)System Broadcast:Context.sendOrderedBroadcast
3)Local Broadcast :只在自身的APP内传播
4.实现广播
1)静态注册:注册完成就一直运行,可以让程序在未启动的情况下就能接收到广播
具体步骤:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.jizhi.administrator.myapplication3"><uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:theme="@style/AppTheme2"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".Broadcast.MyBroadcast1"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver> </application></manifest>
在< application>标签中,设置了一个新的标签< receiver>,所有的静态广播的注册都是在这里进行注册的。它的用法和activity的注册类似,也是通过指定android:name来指定具体注册哪一个广播接收器,然后在 < intent-filter>中加入我们想要接收的广播就行了。同样,监听系统开机广播也要声明权限android.permission.RECEIVE_BOOT_COMPLETED
这样在再次开机后,MyBroadcast1就会接收到这条开机广播,并处理相应的事情。
需要注意的是:在广播接收器的onReceiver()方法中,不要添加过多的逻辑或者任何耗时的操作,因为在广播接收器中是不允许开启线程的,当onReceive()方法运行了较长的时间而没有结束的时候,程序就会报错。因此,广播接收器通常扮演者打开程序其他组件的角色,比如创建一个状态栏通知,或者启动一个服务等。
2)动态注册:动态注册的广播 永远要快于 静态注册的广播,不管静态注册的优先级设置的多高,不管动态注册的优先级有多低。动态注册广播不是 常驻型广播 ,也就是说广播跟随activity的生命周期。注意: 在activity结束前,移除广播接收器。
5.内部实现机制
1)自定义广播几首者BroadcastReceiver,并覆写onRecvice()方法;
2) 通过Binder机制向AMS(Activity Manager Service)进行注册;
3)广播接收者通过Binder机制向AMS发送广播;
4)AMS查找符合相应条件(IntentFilter|permission等)的BroadcastReceiver,将广播发送到BroadcastReceiver(一般情况下是Activity)相应的消息循环队列中
5)消息循环执行拿到此广播,回调BroadcastReceiver中的Receiver()方法.
- 全面升级Android面试之Broadcast receiver面试题集
- 全面升级Android面试之Activity面试题集
- 全面升级Android面试之fragment面试题集
- 全面升级Android面试之Service面试题集
- 全面升级Android面试之Content Provider面试题集
- 全面升级Android面试之webview面试题集
- 全面升级Android面试之Binder面试题集
- 全面升级Android面试之handler面试题集
- 全面升级Android面试之Asynctask面试题集
- 全面升级Android面试之HandlerThread面试题集
- 全面升级Android面试之IntentService面试题集
- android 之broadcast receiver
- Android基本之Broadcast Receiver
- 精通android之Broadcast Receiver
- Android基本之Broadcast Receiver
- Android组件之Broadcast Receiver
- android之Broadcast Receiver详解
- 全面升级Android面试之ListView
- HDU1170 格式题
- 【洛谷 P2587】[ZJOI2008]泡泡堂
- 最优二叉树——哈夫曼树
- P2356 弹珠游戏
- 图标插件相关
- 全面升级Android面试之Broadcast receiver面试题集
- 效率至上 区间最值
- SQL Server2016企业版 附全版本key
- windows matlab cpu 测试faster rcnn
- imageloder 的具体使用
- 牛客 题库 统计二进制数中1或0的个数
- 基于opencv的图像拼接(三): 基于stitch类的实时图像拼接
- 有序数组1 2 3 4 5 6 7 8 9查找3的二分查找序列是
- 大数求商和余数