2015-04-03 5 views
0

В моем сценарии uiautomator я отправлю некоторый промежуточный статус. Когда я запускаю uiautomator из командной строки с помощью adb, я могу видеть мои распечатки статуса по одному. Но когда я запускаю его с фрагментом кода, как показано ниже, я не получаю его по одному. После завершения теста я получаю только полный кусок статуса. Мне нужно получить статус в режиме реального времени для некоторого разбора.Запуск uiautomator в Runtime.getRuntime(). Exec() не дает статуса в реальном времени

Мне кажется, что вывод буферизирован и краснеет сразу. Я попытался изменить размер буфера BufferedReader, но все еще не работал, как он выглядит при запуске из командной строки.

У кого-нибудь есть идеи?

String tempString; 
Process process = Runtime.getRuntime().exec("uiautomator runtest DummyUiAutomation.jar -c com.dummy.DummyAutomation#DummyAction"); 
BufferedReader buffReader = new BufferedReader(new InputStreamReader(process.getInputStream())); 
while ((tempString = buffReader.readLine()) != null) { 
    //do some parsing 
} 
+0

Вы пытаетесь запустить это из своего приложения? –

+0

есть. u может игнорировать беспокойство относительно суперпользователя или укоренение устройства. это не проблема в моем случае. –

ответ

0

Вы пытались использовать Process.waitFor() после прочтения потока?

String tempString; 
Process process = Runtime.getRuntime().exec("uiautomator runtest DummyUiAutomation.jar -c com.dummy.DummyAutomation#DummyAction"); 
BufferedReader buffReader = new BufferedReader(new InputStreamReader(process.getInputStream())); 
while ((tempString = buffReader.readLine()) != null) { 
    //do some parsing 
} 
process.waitFor(); 

От Документах:

Вызывает текущий поток ждать, если это необходимо, до процесса , представленного этим объектом процесс завершается. Этот метод немедленно возвращает , если подпроцесс уже завершен. Если подпроцесс еще не завершен, вызывающий поток будет заблокирован до выхода подпроцесса.