Android 7.0无法接收网络变化广播
来源:互联网 发布:如何自学php 编辑:程序博客网 时间:2024/06/07 01:23
今天我们的app发现一个问题,就是小米5(android 7.0)手机无法接收到系统网络变化的广播,而vivo(android 5.0)可以接收到,我将静态注册(在manifest中配置)改为动态注册可以接收到广播,因此我想可能有2个原因造成了此问题:
- android 7.0对网络变化的静态注册屏蔽了。
- 小米自己修改了系统。
我到官网查看7.0的变化发现果然是7.0系统做了优化:
Project Svelte:后台优化
Android 7.0 移除了三项隐式广播,以帮助优化内存使用和电量消耗。此项变更很有必要,因为隐式广播会在后台频繁启动已注册侦听这些广播的应用。删除这些广播可以显著提升设备性能和用户体验。移动设备会经历频繁的连接变更,例如在 WLAN 和移动数据之间切换时。目前,可以通过在应用清单中注册一个接收器来侦听隐式 CONNECTIVITY_ACTION 广播,让应用能够监控这些变更。由于很多应用会注册接收此广播,因此单次网络切换即会导致所有应用被唤醒并同时处理此广播。
同理,在之前版本的 Android 中,应用可以注册接收来自其他应用(例如相机)的隐式 ACTION_NEW_PICTURE 和 ACTION_NEW_VIDEO 广播。当用户使用相机应用拍摄照片时,这些应用即会被唤醒以处理广播。
为缓解这些问题,Android 7.0 应用了以下优化措施:
面向 Android 7.0 开发的应用不会收到 CONNECTIVITY_ACTION 广播,即使它们已有清单条目来请求接受这些事件的通知。在前台运行的应用如果使用 BroadcastReceiver 请求接收通知,则仍可以在主线程中侦听 CONNECTIVITY_CHANGE。
应用无法发送或接收 ACTION_NEW_PICTURE 或 ACTION_NEW_VIDEO 广播。此项优化会影响所有应用,而不仅仅是面向 Android 7.0 的应用。
如果您的应用使用任何 intent,您仍需要尽快移除它们的依赖关系,以正确适配 Android 7.0 设备。Android 框架提供多个解决方案来缓解对这些隐式广播的需求。例如,JobScheduler API 提供了一个稳健可靠的机制来安排满足指定条件(例如连入无限流量网络)时所执行的网络操作。您甚至可以使用 JobScheduler 来适应内容提供程序变化。如需了解有关 Android N 中后台优化以及如何改写应用的详细信息,请参阅后台优化。
所以我们只能修改动态注册广播的方式了,
- Android 7.0无法接收网络变化广播
- android接收广播监听网络状态变化
- 接收系统广播监听网络变化
- Android解决使用广播监听网络状态变化时接收到多个广播的问题
- Android 无法接收开机广播的问题
- Android APP无法接收开机广播
- Android 无法接收开机广播的问题
- android关于静态广播无法接收2
- Android利用系统广播---监听网络变化
- 简单 android 广播监听网络状态变化
- 笔记 android 监听网络状态变化-------广播
- android 使用广播监听网络状态变化
- 广播监听网络变化
- android网络监听广播遇到网络变化执行多次onRe
- 【Android】Android 4.0 无法接收开机广播的问题
- 【Android】Android 4.0 无法接收开机广播的问题
- Android使用广播监听网络状态变化 一直收到系统广播 广播过滤
- android 4.0 消息广播无法接收的原因
- iOS 日期转string
- java判断字符串是公司还是人名的工具类
- jquery实现下拉框可自定义输入文本的功能
- 多级页表如何节省进程页表空间
- Jenkins 配置用户权限 + Tomcat 发布
- Android 7.0无法接收网络变化广播
- 最接近点对距离
- JSP中的乱码问题
- 优先队列
- 递归获取当前节点以及所有子节点的unid
- 建站流程: 如何建造一个网站?
- 在网页上使用苹方字体
- QGIS编译过程文档记录
- visual studio笔记