Запуск "Runtime.getRuntime (). Exec ()" в цикле - PullRequest
0 голосов
/ 22 февраля 2019

Как и заголовок, я хочу запустить команду Runtime.getRunTime (). Exec () в цикле while.В настоящее время он выполняется только один раз (другие объекты цикла 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 голосов
/ 22 февраля 2019

Ваш вызов exec будет выполнен только один раз, а его результат будет сохранен в переменной P.Вызов waitFor для этого неоднократно не выполнит его снова, он просто читает один и тот же результат снова и снова.

Вы можете заключить вызов в лямбду и вызвать этот лямбда в цикле, чтобы выполнить его нескольковремена:

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...