我在Android中执行shell getevent在发现获取数据时有延迟哪位伙伴知道怎么解决吗?
这里是执行代码
try {
Process process = Runtime.getRuntime().exec("su \n");
dataOutputStream = new DataOutputStream(process.getOutputStream());
dataOutputStream.writeBytes("getevent -l /dev/input/event3 \n");
dataOutputStream.flush();
dataOutputStream.close();
dataOutputStream = null;
inputStream = process.getInputStream();
int c;
StringBuilder stringBuilder = new StringBuilder();
String line;
while ((c = inputStream.read()) != -1) {
stringBuilder.append((char)c);
if ('\n' == c) {
line = stringBuilder.toString();
stringBuilder.setLength(0);
Log.i(MainActivity.LOG_TAG, String.format("输出:%s", line));
}
}
process.waitFor();
Log.i(MainActivity.LOG_TAG, "监听触点结束");
} catch (Exception e) {
e.printStackTrace();
}
这是单击模拟器后的执行结果:
上图是点击模拟器后控制台的执行情况,可以看到Logcat没有输出但是terminal是有输出的。
在Android中使用getevent执行shell脚本时,如果发现获取数据有延迟,可能是因为缓存问题导致的。
有几种方法可以尝试解决这个问题:
你可以使用以下命令来获取输入事件信息:
adb shell dumpsys input
或者使用以下命令来获取输入设备信息:
adb shell dumpsys input | grep "Input Devices:"
不好回答这个问题,因为这个里面多个进程,管道,本身就会这样。
要更好的解决,可以去监听这个event结点,这样子是可以很好的处理的。
具体可以跟驱动沟通下。
因为这个里面多个进程,管道,本身就会这样。
要更好的解决,可以去监听这个event结点,这样子是可以很好的处理的。
具体可以跟驱动沟通下。
可能的原因:
数据输出速度慢:输出数据的程序运行速度慢,导致数据输出缓慢。
缓冲区满:缓冲区满,导致数据无法及时输出。
网络延迟:如果数据来自网络,网络延迟也可能导致数据获取延迟。
高负载:如果系统高负载,进程获取数据的优先级较低,导致获取数据延迟。