在循环中运行“Runtime.getRuntime()。exec()”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在循环中运行“Runtime.getRuntime()。exec()”相关的知识,希望对你有一定的参考价值。

像标题一样,我想在while循环中运行“Runtime.getRunTime()。exec()”命令。目前,它只执行一次(while循环中的其他对象多次执行)。我试过破坏这个过程但是没有用。示例如下:

var x  = 0

val P = Runtime.getRuntime().exec(
    arrayOf(
        "su", "-c", "" +
        "monkey -p com.ubercab -c android.intent.category.LAUNCHER 1"
    )
)

while (x < 10) {

    Log.i("app", x.toString())
    P.waitFor()
    x += 1    

}

在上面的代码中,重复了Log语句,但P.waitFor()只运行一次。

答案

您对exec的调用只执行一次,其结果将存储在P变量中。反复调用waitFor将不再执行它,它只是一遍又一遍地读取相同的结果。

您可以将调用包装在lambda中,并在循环中调用该lambda以多次执行它:

val P: () -> Process = {
    Runtime.getRuntime().exec(
            arrayOf(
                    "su", "-c", "" +
                    "monkey -p com.ubercab -c android.intent.category.LAUNCHER 1"
            )
    )
}

while (x < 10) {
    Log.i("app", x.toString())
    P().waitFor()
    x += 1
}

或者您可以将它放在常规函数中:

fun p(): Process {
    return Runtime.getRuntime().exec(
            arrayOf(
                    "su", "-c", "" +
                    "monkey -p com.ubercab -c android.intent.category.LAUNCHER 1"
            )
    )
}

while (x < 10) {
    Log.i("app", x.toString())
    p().waitFor()
    x += 1
}

以上是关于在循环中运行“Runtime.getRuntime()。exec()”的主要内容,如果未能解决你的问题,请参考以下文章

使用Runtime.getRuntime().exec()在java中调用python脚本

当我执行多个优于 Runtime.getRuntime().availableProcessors()) 的并行线程时,为啥我的 Java 程序运行得更快?

使用java.lang.Runtime.getRuntime无法在matlab中调用多个python脚本实例

runtime.getruntime.exec 无法识别可执行文件

Runtime.getRuntime().exec()需要注意的地方

用Runtime.getRuntime().exec()需要注意的地方