android 广播知识点
来源:互联网 发布:java新闻发布系统源码 编辑:程序博客网 时间:2024/06/03 17:32
如果你不想发送广播给其他应用程序,可以使用LocalBroadcastManager本地广播来代替普通广播。这将有效避免其他应用程序接受或者发送你的广播。
一、广播的注册方式
1、动态注册
即在代码中对广播进行注册。通过Context.registerReceiver()语句进行注册,并且在onDestory()方法里进行取消注册unregisterReceiver()。
缺点:必须在程序启动后才能接受到广播,因为注册的逻辑是写在onCreate()方法中的。
2、静态注册
即在AndroidManifest.xml里面通过<receiver>标签进行注册。
注意:如果在Activity.onResume()中注册广播,则应该在onPause()中取消注册。
二、广播的类型
1、标准广播(发送 Context.sendBroadcast)
是一种完全异步的广播。在广播发出后,所有的广播接收器在相同时间收到这条消息。
2、有序广播(发送 Context.sendOrderedBroadcast)
有序广播是分先后顺序的,优先级高的先接收到广播。并且可以对广播进行拦截。
三、广播安全问题
广播有可能被其他应用所利用,所以需要考虑安全问题:
1、确保广播的命名是独一无二的,不能与其他应用程序冲突。
2、在使用registerReceiver(BroadcastReceiver, IntentFilter)注册广播的时候,其他应用程序可能发送广播给你的应用,所以应该设置如下权限:
a.为了阻止其他应用程序发送给本应用程序广播,应该设置 android:exported="false"属性,拒绝外部进程发送来的广播。
b.在你使用sendBroadcast(Intent) 或者是相关方法来发送广播的时候,其他的应用程序可能接收到此广播,所以可以使用 LocalBroadcastManager(本地广播)来对广播进行发送,这样发送的广播不会跳出应用程序。本地广播是无法通过静态注册的方式来接收的。
本地广播的优势是:广播不会离开本应用程序。其他程序的广播进不来。本地广播效率更高。
3、当发送带权限的广播的时候( sendBroadcast(Intent, String)或者sendOrderedBroadcast(Intent, String, BroadcastReceiver, android.os.Handler, int, String, Bundle)),广播接收器应该在AndroidManifest.xml的 <uses-permission>标签下声明该权限,否则会收不到此广播。
4、当注册广播接受器时声明了权限(registerReceiver(BroadcastReceiver, IntentFilter, String, android.os.Handler) 或者在 <receiver>标签下声明了权限),则只有声明了相应权限的广播才能够发送给接收器。
在广播接收器中,如果要执行长时间的后台程序,建议使用Service而不是子线程。因为在BroadCastReceiver被回收后,在它内部开启的线程就成了空线程,在设备空闲的时候没有影响,一旦发生运行资源不足,这些空线程就会被系统回收,导致线程中的任务无法完全执行,从而影响线程执行。所以在广播接收器中,避免开启线程,而应使用服务来进行长时间的运行。
0 0
- android 广播知识点
- Android 开发中广播Broadcast 知识点
- android 知识点总结 广播接收器生命周期【爱扒拉】
- Android基础知识整合篇——广播接收器知识点
- 广播和广播接受者知识点分类
- BroadcastReceiver广播接收器知识点总结
- Spark中广播变量知识点
- android 广播
- android广播
- Android广播
- android广播
- android广播
- android广播
- android 广播
- android 广播
- android 广播
- android广播
- android广播
- cmake command
- 提升数据库数据查询效率
- 要入手的除了电热毯,还有安卓呀!
- CI框架源码解析十七之异常处理类文件Exceptions.php
- C与C++相互调用函数,变量
- android 广播知识点
- 【POJ 2484】A Funny Game 【简单博弈】
- acm 大数题
- 前端知识(4)
- C# Winform WCF 调试服务端的程序(三种方法)
- Trie(前缀树)
- 旧约——加餐的量子态
- 1622-5 孔富晨 总结《2016年10月28日》 【连续第28天总结】
- C/C++笔试必须熟悉掌握的头文件系列(二)——math.h/cmath