Android开发文档中NYC指代及Wifi服务获取上下文规则
Android WifiManager相关问题解答
Android官方文档中针对WIFI_SERVICE的定义有如下说明:
WifiManager用于管理Wi-Fi连接。在NYC之前的Android版本中,获取该实例仅可使用Application Context,不可使用其他派生Context,避免调用进程出现内存泄漏。
1. "NYC"的具体指代
NYC是Android 7.0版本的开发代称,对应该版本的正式命名Nougat(牛轧糖),API级别为24,是2016年正式发布的Android系统版本。Android历代版本都习惯用甜点名称作为版本代号,NYC是Nougat开发阶段使用的缩写简称。
2. 需要通过Application Context获取Wifi服务的场景
- 所有适配Android 7.0(API 24)以下系统版本的业务场景,只要需要调用
WifiManager的能力,都必须用Application Context获取实例。如果传入Activity、自定义View等短生命周期的派生Context,WifiManager会长期持有这个Context的引用,导致对应的组件在销毁后无法被垃圾回收,触发内存泄漏,严重时甚至会引发OOM崩溃。 - 即便是在Android 7.0及以上版本,如果你获取
WifiManager是给全局单例、后台常驻任务、跨页面复用的工具类这类和App整个进程生命周期一致的逻辑使用,也建议统一用Application Context获取,从编码习惯上规避上下文泄漏的风险。 - 常见的高风险具体场景包括:全局Wi-Fi连接状态监听、后台定时Wi-Fi扫描任务、App启动阶段的Wi-Fi网络状态预校验、封装跨页面调用的Wi-Fi操作能力等。
内容的提问来源于stack exchange,提问作者Weidian Huang
相关产品推荐
相关产品推荐

