网络恢复后，页面内容无法刷新
==============

#### 问题现象

在无网络（如未联网或弱网）状态下进入应用后，应用不能正确加载相应界面与数据。当恢复网络连接后，此时页面也无法自动刷新并显示更新后的数据。用户也无法通过任何操作手动触发页面刷新，影响使用体验。

#### 背景知识

*   [网络连接管理](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/net-connection-manager)：Network Kit中网络连接管理提供管理网络一些基础能力，包括WiFi/蜂窝/Ethernet等多网络连接优先级管理、网络质量评估、订阅默认/指定网络连接状态变化、查询网络连接信息、DNS解析等功能。
    1.  [接收指定网络的状态变化通知](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/net-connection-manager#接收指定网络的状态变化通知)。
        
        | 
        接口
        
         | 
        
        描述
        
         |
        | :-- | :-- |
        | 
        
        [register](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-net-connection#register)
        
         | 
        
        订阅指定网络状态变化的通知。
        
         |
        | 
        
        [on('netAvailable')](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-net-connection#onnetavailable)
        
         | 
        
        订阅网络可用事件。此接口调用之前需要先调用register接口。
        
         |
        | 
        
        [on('netUnavailable')](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-net-connection#onnetunavailable)
        
         | 
        
        订阅网络不可用事件。此接口调用之前需要先调用register接口。
        
         |
        | 
        
        [on('netLost')](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-net-connection#onnetlost)
        
         | 
        
        订阅网络丢失事件。此接口调用之前需要先调用register接口。
        
         |
        | 
        
        [unregister](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-net-connection#unregister)
        
         | 
        
        取消订阅默认网络状态变化的通知。
        
         |
        
    2.  [监控默认网络变化并主动重建网络连接](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/net-connection-manager#监控默认网络变化并主动重建网络连接)：根据当前网络状态及网络质量情况，默认网络可能会发生变化，监控默认网络的变化后，应用报文能够快速迁移到新默认网络上。
    3.  [判断默认网络是否可以访问互联网](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/net-connection-manager#判断默认网络是否可以访问互联网)：
        
        | 
        方法名
        
         | 
        
        描述
        
         |
        | :-- | :-- |
        | 
        
        [getDefaultNetSync](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-net-connection#connectiongetdefaultnetsync9)
        
         | 
        
        使用同步方法获取默认激活的数据网络。
        
         |
        | 
        
        [getNetCapabilitiesSync](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-net-connection#connectiongetnetcapabilitiessync10)
        
         | 
        
        netHandle有效的情况下，获取netHandle对应网络的能力信息，使用同步方式返回。
        
         |
        | 
        
        [getDefaultNet](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-net-connection#connectiongetdefaultnet)
        
         | 
        
        异步获取默认激活的数据网络。
        
         |
        | 
        
        [getNetCapabilities](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-net-connection#connectiongetnetcapabilities)
        
         | 
        
        获取netHandle对应网络的能力信息。能力信息包含了网络类型和网络具体能力等网络信息。
        
         |
        

*   [Network Boost Kit（网络加速服务）](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/network-boost-kit-guide)：提供[网络质量评估](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/networkboost-qoscallback)、[网络场景识别](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/networkboost-scenecallback)和[应用传输体验反馈](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/networkboost-appreportqoe)。应用可以快速调整应用数传策略（缓存、调速等），实现网络自适应。同时应用将传输体验告知系统，系统综合决策后进行网络加速，从而提升用户的上网体验。

#### 问题定位

1.  对于弱网环境切换到正常网络环境（默认网络未发生变化），根据【**背景知识**】相关网络服务和具体场景分析使用什么网络能力完成数据加载，以HTTP和RCP为例，查看是否有超时机制和重试机制。
    *   HTTP超时重连：搜索[HttpRequest.request](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-http#request)/[HttpRequest.requestInstream](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-http#requestinstream10)，检查是否设置connectTimeout、readTimeout以及setTimeout等方式进行错误处理与重试机制。
    *   RCP超时重连：搜索[rcp.createSession](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/remote-communication-rcp#section163819131811)，查看相关配置，如connectMs连接超时时间和transferMs传输超时时间等，同时根据创建的会话搜索[fetch](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/remote-communication-rcp#section20139131372817)，检查是否设置setTimeout等错误处理与重试机制。
2.  对于网络类型切换和无网络与有网络之间的切换：
    *   搜索[register](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-net-connection#register)，检查是否注册网络监听。
    *   搜索[on('netAvailable')](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-net-connection#onnetavailable)/[on('netLost')](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-net-connection#onnetlost)等，检查是否在调用register接口后订阅网络可用/丢失等事件。
    *   在上一步监听事件中搜索[AppStorage](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-appstorage)，查看是否正确存储应用全局网络状态，并在对应场景下监听状态变量的变化，根据对应的变化和实际应用场景重新连接网络。重新建立网络连接参考[默认网络变化后重新建立网络连接](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/net-connection-manager#默认网络变化后重新建立网络连接)。

#### 场景一

#### \[h2\]分析结论

对于弱网环境切换到正常网络环境（默认网络未发生变化），未使用超时机制和重试机制。如HTTP请求列表数据时，未设置HTTP连接超时和请求重试，导致无法自动或者主动重新发送相关网络请求。

#### \[h2\]修改建议

1.  网络超时分为网络连接超时和网络读取超时，网络重试常用的策略有定时重试、指数退避重试、随机退避重试等。
    *   定时重试：设定一个固定的重试次数，当网络请求失败时，在该次数范围内进行重试，每次重试之间的时间间隔可以是固定的，也可以根据具体情况进行调整。例如，设定重试次数为3次，每次重试间隔为2秒。
    *   指数退避重试：每次重试的时间间隔按照指数级增长，如重试间隔时间依次为2、4、8、16等。
    *   随机退避重试：每次重试的时间间隔在一个指定的范围内随机取值。例如，设定重试间隔时间在1秒到5秒之间随机，这样可以避免多个请求同时重试，分散服务器的负载压力，提高整体的重试成功率。
2.  在HarmonyOS中，在HTTP、RCP发生错误或者超时后，都可以使用网络超时重连的机制。示例参考[开发步骤](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-network-reconnection#section097471264912)。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/76/v3/_s3ciammRJS3n3D7HNwYoQ/notice_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260709T134209Z&HW-CC-Expire=86400&HW-CC-Sign=6B2B27930E3AACB32A51F634E9AF1B9C98B963080E5AE9E51161DF9963D22CE9)
    
    设置HTTP请求的读取超时时间、连接超时时间。
    
    可以根据网络状态进行判断，然后再进行重连。这样可以在非网络问题的情况下进行重试，可以更精准地控制重试行为，提高请求的成功率和效率。例如，对于一些表示服务错误的响应码（如 500 Internal Server Error、503 Service Unavailable 等），可以进行重试。
    
    使用setTimeout进行函数执行延迟，配合使用Promise，进而同步获取网络请求结果。
    

#### 场景二

#### \[h2\]分析结论

对于网络类型切换和无网络与有网络之间的切换：由于未通过监听网络状态变化，未能感知网络发生变化，或者未能正确管理网络状态和状态变量的变化，对网络进行关闭和重连导致故障现象。

#### \[h2\]修改建议

1.  调用[register](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-net-connection#register)监听网络状态变化，并使用[on('netAvailable')](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-net-connection#onnetavailable)/[on('netLost')](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-net-connection#onnetlost)订阅网络可用/丢失等事件。
2.  使用[AppStorage](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-appstorage)存储应用全局网络状态。
3.  使用[@Watch](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-watch)监听状态变量的变化，并根据对应的变化和实际应用场景重新连接网络。

详情参考[开发步骤](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-network-reconnection#section78034221254)。