鸿蒙三方库 | harmony-utils之NetworkUtil网络状态订阅详解

发布时间:2026/7/18 4:10:58

鸿蒙三方库 | harmony-utils之NetworkUtil网络状态订阅详解 前言实时感知网络状态变化对应用体验至关重要如网络断开时暂停下载、网络恢复时自动重连。pura/harmony-utils的NetworkUtil封装了网络状态订阅方法支持实时监听网络变化。本文将从API说明、代码实战、进阶用法、常见问题等多个维度进行全面讲解帮助开发者快速掌握并应用到实际项目中。一、NetworkUtil订阅核心APINetworkUtil提供了以下网络状态订阅方法方法说明参数使用场景onNetworkChange(callback)订阅网络变化() void实时网络感知offNetworkChange(callback)取消网络变化订阅() void释放资源1.1 核心特性实时感知网络变化时立即触发回调回调机制基于回调函数的事件驱动模式生命周期安全支持注册和取消避免内存泄漏主线程执行回调在主线程执行可直接更新UI1.2 网络变化回调适用场景场景网络恢复网络断开下载管理自动恢复下载暂停下载数据同步自动同步缓存待同步数据实时通信重连服务器显示离线状态视频播放恢复播放缓冲提示二、完整使用步骤2.1 安装依赖ohpminstallpura/harmony-utils2.2 订阅网络变化import{NetworkUtil}frompura/harmony-utils;privatenetworkCallback(){letavailableNetworkUtil.isNetworkAvailable();this.result网络变化:${available?可用 ✅:不可用 ❌};};aboutToAppear(){NetworkUtil.onNetworkChange(this.networkCallback);}aboutToDisappear(){NetworkUtil.offNetworkChange(this.networkCallback);}2.3 网络变化时自动处理NetworkUtil.onNetworkChange((){if(NetworkUtil.isNetworkAvailable()){this.resumePendingRequests();}else{this.pauseAllRequests();}});三、完整页面示例import{NetworkUtil}frompura/harmony-utils;EntryComponentstruct NetworkSubDemo{Stateresult:string等待网络变化...;privatecallback(){letavailableNetworkUtil.isNetworkAvailable();this.result网络:${available?可用:不可用};};aboutToAppear(){NetworkUtil.onNetworkChange(this.callback);}aboutToDisappear(){NetworkUtil.offNetworkChange(this.callback);}build(){Column({space:12}){Text(this.result).fontSize(14).fontColor(#333333)}.padding(16)}}四、进阶用法4.1 网络状态管理器import{NetworkUtil}frompura/harmony-utils;classNetworkStateManager{privatelisteners:Array(available:boolean)void[];privatecallback(){letavailableNetworkUtil.isNetworkAvailable();this.listeners.forEach(cbcb(available));};init(){NetworkUtil.onNetworkChange(this.callback);}addListener(listener:(available:boolean)void){this.listeners.push(listener);}destroy(){NetworkUtil.offNetworkChange(this.callback);this.listeners[];}}4.2 离线队列privatependingRequests:Function[][];NetworkUtil.onNetworkChange((){if(NetworkUtil.isNetworkAvailable()){while(this.pendingRequests.length0){letrequestthis.pendingRequests.shift();request?.();}}});五、注意事项回调引用注册和取消订阅需使用同一回调引用生命周期页面销毁时务必取消订阅性能回调中避免耗时操作初始化依赖使用前需确保AppUtil.init()已调用多次注册避免重复注册同一回调六、常见问题Q1: 回调没有触发怎么办检查AppUtil.init()是否已调用以及是否配置了网络权限。Q2: 可以注册多个回调吗可以注册多个不同的回调函数每个回调都会在网络变化时被调用。Q3: 回调中如何获取网络类型在回调中调用NetworkUtil.isWifiConnected()等方法获取最新网络类型。Q4: 取消订阅后还会收到回调吗不会取消订阅后不再触发回调但之前已入队的回调可能仍会执行。总结NetworkUtil的网络状态订阅方法为实时感知网络变化提供了便捷支持。本文详细介绍了核心API、使用步骤、完整示例、进阶用法以及常见问题的解决方案。合理使用网络订阅可以实现自动重连、离线缓存等智能功能。本文基于pura/harmony-utils工具库更多功能请参考官方文档与后续系列文章。

相关新闻