setInterval(function () {
gesture(600, [500, 300], [500, 1000]);
},1500),这个方法执行了一次,hamibot卡主,然后就闪退

已存档
兔如花
9
· 21 天前
第 1 条补充
·
21 天前

以上方法执行一次后,还是会卡,导致hamibot闪退

回答

Hamibot AI
1
· 21 天前

你遇到的问题是由于定时器与手势操作的阻塞特性冲突导致的。以下是解决方案:

建议改为使用 setTimeout 递归调用替代 setInterval,因为手势操作本身具有阻塞性(文档1说明手势会阻塞脚本执行)。修改后的代码如下:

// 文档地址 https://docs.hamibot.com/
function executeGesture() {
    gesture(600, [500, 300], [500, 1000]);
    // 设置下一次执行间隔为手势时长的2倍(保证操作完成)
    setTimeout(executeGesture, 1200);
}

// 首次执行
executeGesture();

问题原因分析:

  1. setInterval 的 1500ms 间隔时间与手势的 600ms 阻塞存在冲突
  2. 当定时器时间 < 操作阻塞时间时,会导致多个手势操作堆积
  3. 原始代码未处理手势执行完成的时序问题(文档1明确说明手势执行完成才会继续执行脚本)

优化要点:

  • 使用递归 setTimeout 替代 setInterval,确保每次手势执行完成后再启动下一次
  • 设置间隔时间 ≥ 手势时长的 2 倍(600ms * 2 = 1200ms)
  • 避免了多个手势操作同时执行导致的冲突

如果问题仍然存在,请检查:

  1. 设备的屏幕分辨率是否与坐标匹配(500,300 → 500,1000 需符合屏幕比例)
  2. 手势路径是否存在系统弹窗阻挡
  3. 脚本是否获得足够的权限(无障碍/悬浮窗权限等)

补充回答 1

根据你的描述,脚本执行一次后卡住并闪退,问题可能由以下原因叠加导致:


关键问题定位

  1. 手势操作的阻塞特性
    手势操作是同步阻塞的(文档1明确说明手势执行完成才会继续),即使使用 setTimeout,若手势执行异常(如路径错误、权限缺失),仍会导致崩溃。

  2. 设备兼容性问题
    某些设备(如MIUI 12+)需额外设置 前台服务悬浮窗权限(文档3提到需开启前台服务),否则长时间运行会触发系统限制。

  3. 手势路径冲突
    手势的起始点 [500, 300] 和终点 [500, 1000] 可能触发系统弹窗(如通知栏、锁屏界面),导致脚本阻塞。


解决方案

1. 彻底检查设备设置

  • 开启前台服务:脚本运行时,点击 Hamibot 应用顶部的「前台服务」按钮,确保持续运行。
  • 关闭省电策略:进入 设置 → 电池 → 省电策略 → 关闭
  • 允许悬浮窗权限:进入 设置 → 应用权限 → Hamibot → 悬浮窗权限

2. 优化手势逻辑

  • 增加异常处理:用 try-catch 包裹手势操作,避免异常直接崩溃。
  • 调整手势路径:确保坐标范围不超过屏幕分辨率(如 500,1000 可能超出小屏手机)。
  • 延长间隔时间:将 setTimeout 的间隔调整为手势时长的 3倍(600ms * 3 = 1800ms)。
// 文档地址 https://docs.hamibot.com/
function executeGesture() {
    try {
        // 确保手势路径安全(检查坐标是否在屏幕内)
        gesture(600, [500, 300], [500, 1000]); 
    } catch (e) {
        // 捕获异常并输出日志
        toast("手势执行失败: " + e.message);
    }
    // 增加间隔时间
    setTimeout(executeGesture, 1800);
}
executeGesture();

3. 验证手势路径

  • 检查屏幕分辨率:运行 device.widthdevice.height 获取屏幕尺寸,确保 [500, 300][500, 1000] 在范围内。
  • 避开系统区域:避免滑动到状态栏(顶部)或导航栏(底部)。

4. 强制保活脚本

添加「保持在线」策略(文档3):

// 文档地址 https://docs.hamibot.com/
auto.waitFor(); // 强制等待无障碍服务开启
device.keepOn(); // 保持屏幕常亮(避免休眠)

紧急处理建议

如果问题仍未解决:

  1. 简化测试:单独运行一次手势操作,确认基础功能正常:
    gesture(600, [500, 300], [500, 1000]); 
    toast("手势完成");
    
  2. 反馈问题:通过 Hamibot 官方渠道创建工单(点击脚本页面的「更多 → 创建工单」),附上设备型号、Hamibot 版本和完整脚本日志。

如需进一步协助,可发送邮件至 support@hamibot.cn

ℹ️ 本回答由 AI 生成,内容仅供参考