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

时间:2019-02-22 11:29:25

标签: android kotlin

像标题一样,我想在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()仅运行一次。

1 个答案:

答案 0 :(得分:1)

您对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
}