像标题一样,我想在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
}