我目前正在Android上运行命令,并希望在触摸显示屏时立即得到结果。命令“su -c getevent -l”在终端中运行时效果很好;每个屏幕触摸立即将该行打印到终端。
但是,在运行以下代码时,read()命令会阻止,并且在新数据进入时不会阻塞(并运行Log.d()):
Process process = Runtime.getRuntime().exec(new String[] { "su", "-c", "getevent -l" });
InputStreamReader reader = new InputStreamReader(process.getInputStream());
while (reader.read() != -1) {
Log.d("", "Got data from reader.read()");
}
我有时可以通过使用大量数据使su进程饱和来解除阻塞。因此,这对我来说似乎是一种缓冲问题,但我没有使用BufferedReader。
此外,即使我在循环中手动检查更多数据(通过reader.ready()),它仍然无法检测到数据已准备好被读取,直到我多次触摸屏幕(再次,看似填补一些未知的缓冲区):
while(true){
while(reader.ready()){
Log.d("", "Got data from reader.read()");
}
Thread.sleep(100);
}
是否有可能造成这种情况的缓冲?还是直接访问输入流的更好方法?