HarmonyOS 鸿蒙端防抖动策略:单例工具类助力提升应用稳定性

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙端防抖动策略:单例工具类助力提升应用稳定性

【背景】

在当前的前端Web开发中,频繁的调用鸿蒙端功能已成为导致bug的常见原因。为了解决这一问题,前端团队无法直接进行修改,因此我们决定在鸿蒙端进行优化。通过引入防抖动机制,我们可以在单位时间内确保功能调用仅执行一次,从而有效避免bug的发生。

【工具类实现】为了实现这一功能,我们开发了一个名为 MyDebounceSingletonUtil 的防抖工具类。该工具类位于 entry/src/main/ets/common/ 目录下,其结构如下:

export class MyDebounceSingletonUtil {
private static instance: MyDebounceSingletonUtil;
private static methodsMap: Map<string, number> = new Map();

private constructor() { }

public static getInstance(): MyDebounceSingletonUtil { if (!MyDebounceSingletonUtil.instance) { MyDebounceSingletonUtil.instance = new MyDebounceSingletonUtil(); } return MyDebounceSingletonUtil.instance; }

public isDebounced(methodName: string, milliseconds: number): boolean { const now = Date.now(); const lastExecutionTime = MyDebounceSingletonUtil.methodsMap.get(methodName);

<span class="hljs-keyword"><span class="hljs-keyword">if</span></span> (lastExecutionTime &amp;&amp; (now - lastExecutionTime) &lt; milliseconds) {
  console.info(`${methodName}方法在指定时间${milliseconds}内已执行过`)
  <span class="hljs-keyword"><span class="hljs-keyword">return</span></span> <span class="hljs-literal"><span class="hljs-literal">true</span></span>; <span class="hljs-comment"><span class="hljs-comment">// 方法在指定时间内已执行过</span></span>
} <span class="hljs-keyword"><span class="hljs-keyword">else</span></span> {
  MyDebounceSingletonUtil.methodsMap.set(methodName, now);
  <span class="hljs-keyword"><span class="hljs-keyword">return</span></span> <span class="hljs-literal"><span class="hljs-literal">false</span></span>; <span class="hljs-comment"><span class="hljs-comment">// 方法在指定时间内未执行过</span></span>
}

} }

// // 使用示例 // if (MyDebounceSingletonUtil.getInstance().isDebounced(‘call’, 500)) { // return; // }<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

【使用示例】以下是如何在页面 Page001.ets 中使用 MyDebounceSingletonUtil 工具类的示例:

import { MyDebounceSingletonUtil } from ‘…/common/MyDebounceSingletonUtil’;

@Entry @Component struct Page001 { build() { Column() { Button(‘防抖测试’).onClick(() => { if (MyDebounceSingletonUtil.getInstance().isDebounced(‘防抖测试onClick’, 500)) { return; } console.info(‘执行了防抖测试点击事件’) }) } .width(‘100%’) .height(‘100%’) } }<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

【测试结果】通过快速点击测试,我们发现 防抖测试onClick 方法在500毫秒内确实只执行了一次,验证了防抖功能的正确性。

防抖测试onClick方法在指定时间500内已执行过
执行了防抖测试点击事件
防抖测试onClick方法在指定时间500内已执行过
防抖测试onClick方法在指定时间500内已执行过
防抖测试onClick方法在指定时间500内已执行过
执行了防抖测试点击事件
防抖测试onClick方法在指定时间500内已执行过
防抖测试onClick方法在指定时间500内已执行过
防抖测试onClick方法在指定时间500内已执行过<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

【总结】

通过引入 MyDebounceSingletonUtil 工具类,我们成功地在鸿蒙端实现了方法调用的防抖功能,有效减少了bug的发生。这一解决方案为前端和鸿蒙端之间的交互提供了更加稳定和可靠的保障。

1 回复

对于HarmonyOS鸿蒙端的防抖动策略,我有着深入的理解。在前端Web开发中,频繁的调用鸿蒙端功能已成为导致bug的常见原因。为了解决这一问题,我们决定在鸿蒙端进行优化,通过引入防抖动机制,可以在单位时间内确保功能调用仅执行一次,从而有效避免bug的发生。

具体来说,我们开发了一个名为MyDebounceSingletonUtil的防抖工具类。这个工具类采用了单例设计模式,确保了全局唯一性。通过维护一个方法名称到执行时间的映射,MyDebounceSingletonUtil可以判断某个方法是否在指定时间内已经被执行过。如果在指定时间内已经执行过,就返回true,表示需要防抖;否则,更新执行时间并返回false,表示可以执行。

这种策略在实际应用中取得了良好的效果。例如,在Page001.ets页面中,我们使用MyDebounceSingletonUtil工具类对按钮的点击事件进行了防抖处理。通过快速点击测试,我们发现防抖测试onClick方法在500毫秒内确实只执行了一次,验证了防抖功能的正确性。

总的来说,MyDebounceSingletonUtil工具类的引入为鸿蒙端的方法调用提供了有效的防抖功能,提升了应用的稳定性。这一解决方案为前端和鸿蒙端之间的交互提供了更加稳定和可靠的保障。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部