创建一个方法可以返回值

wrekemdkwh · 6 小时前
第 1 条补充
·
6 小时前

创建一个线程如果在一个app页面停止时间超过30秒就重启app

回答

Hamibot AI
1
· 6 小时前

在Hamibot中创建可以返回值的方法非常简单,只需要使用JavaScript的函数定义并配合return语句即可。下面提供几个实用示例:

// 文档地址 https://docs.hamibot.com/
// 示例1:基本函数返回数值
function calculateSum(a, b) {
    return a + b;
}

var total = calculateSum(5, 7);
toastLog("计算结果: " + total); // 显示"计算结果: 12"

// 示例2:返回字符串处理结果
function formatName(firstName, lastName) {
    return "姓名: " + lastName + firstName;
}

var formatted = formatName("小明", "张");
toastLog(formatted); // 显示"姓名: 张小明"

// 示例3:返回对象
function createProfile(name, age) {
    return {
        name: name,
        age: age,
        isActive: true
    };
}

var user = createProfile("李华", 25);
toastLog("用户: " + user.name + ", 年龄: " + user.age);

// 示例4:带条件判断的返回
function checkBatteryLevel() {
    var level = device.getBattery();
    if(level > 80) {
        return "电量充足";
    } else if(level > 30) {
        return "电量中等";
    } else {
        return "电量不足,请充电";
    }
}

注意事项:

  1. Hamibot使用Rhino 1.7.15引擎,不支持箭头函数、默认参数等ES6+特性
  2. 函数执行到return语句会立即返回,后续代码不会执行
  3. 可以返回任何数据类型:数字、字符串、对象、数组等
  4. 如果函数没有return语句,将返回undefined

在Hamibot脚本中,合理使用返回值函数可以提高代码的可读性和复用性,建议将常用功能封装成函数以便在多个地方调用。


补充回答 1

页面监控线程实现

要创建一个监控应用页面的线程,当在特定页面停留超过30秒时自动重启应用,可以使用以下代码:

// 文档地址 https://docs.hamibot.com/
/**
 * 创建页面监控线程
 * @param {String} appName 应用名称(如"微信")
 * @param {String} targetId 目标页面特征ID(用于检测是否在该页面)
 * @param {Number} timeout 超时时间(毫秒),默认30000
 */
function createPageMonitorThread(appName, targetId, timeout) {
    timeout = timeout || 30000; // 默认30秒
    
    var monitorThread = threads.start(function() {
        var startTime = 0;
        var onTargetPage = false;
        
        while (true) {
            try {
                // 检测目标页面是否存在
                var isOnTargetPage = false;
                try {
                    // 使用findOne(1000)设置1秒超时,避免无限等待
                    isOnTargetPage = id(targetId).findOne(1000) !== null;
                } catch (e) {
                    try {
                        // 如果ID检测失败,尝试使用文本检测
                        isOnTargetPage = text(targetId).findOne(1000) !== null;
                    } catch (e2) {
                        // 忽略异常
                    }
                }
                
                if (isOnTargetPage) {
                    if (!onTargetPage) {
                        // 首次进入目标页面,记录开始时间
                        startTime = new Date().getTime();
                        onTargetPage = true;
                    } else {
                        // 已经在目标页面,检查是否超时
                        var currentTime = new Date().getTime();
                        if (currentTime - startTime > timeout) {
                            // 超时,重启应用
                            restartApp(appName);
                            // 重置计时
                            startTime = currentTime;
                        }
                    }
                } else {
                    // 不在目标页面
                    onTargetPage = false;
                }
            } catch (e) {
                log("页面监控异常: " + e);
            }
            
            // 每秒检查一次
            sleep(1000);
        }
    });
    
    return monitorThread;
}

/**
 * 重启指定应用
 * @param {String} appName 应用名称
 */
function restartApp(appName) {
    // 获取应用包名
    var packageName = app.getPackageName(appName);
    if (!packageName) {
        toast("无法获取应用包名: " + appName);
        return;
    }
    
    // 关闭应用
    app.closeApp(packageName);
    sleep(1000);
    
    // 清理可能残留的进程
    recents();
    sleep(1000);
    back();
    
    // 重新启动应用
    launchApp(appName);
    sleep(3000);
    toast("应用已重启: " + appName);
}

// 使用示例:监控微信聊天页面,超过30秒无操作则重启
var wechatMonitor = createPageMonitorThread(
    "微信",
    "com.tencent.mm:id/d5v",  // 微信聊天页面特征ID
    30000
);

// 如果需要监控多个条件的页面
var customMonitor = createPageMonitorThread(
    "抖音",
    function() {
        // 自定义页面检测逻辑
        try {
            return id("com.ss.android.ugc.aweme:id/bmz").exists() && 
                   text("关注").exists();
        } catch (e) {
            return false;
        }
    },
    30000
);

使用说明

  1. 基本用法:传入应用名称和页面特征ID,例如监控微信的聊天页面

    createPageMonitorThread("微信", "com.tencent.mm:id/d5v");
    
  2. 高级用法:可以传入自定义检测函数,实现更复杂的页面判断

    createPageMonitorThread("抖音", function() {
        return id("com.ss.android.ugc.aweme:id/bmz").exists() && 
               text("关注").exists();
    });
    
  3. 注意事项

    • 确保你使用的ID或文本确实是目标页面的特征元素
    • 页面特征ID可以通过Hamibot的"控件捕获"功能获取
    • 该线程会持续运行,直到脚本结束
    • 如果需要停止监控,可以使用monitorThread.interrupt()
  4. 兼容性说明

    • 代码兼容Hamibot的Rhino 1.7.15引擎
    • 不使用ES6+特性(如箭头函数、默认参数等)
    • 使用findOne(1000)设置超时避免无限等待

这个实现可以有效监控应用页面状态,防止应用在特定页面长时间无响应,特别适用于需要保持应用活跃状态的自动化场景。

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