Android Process.getInputStream()获取数据时怎么会有延迟?

我在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();
        }

这是单击模拟器后的执行结果:

img

上图是点击模拟器后控制台的执行情况,可以看到Logcat没有输出但是terminal是有输出的。

在Android中使用getevent执行shell脚本时,如果发现获取数据有延迟,可能是因为缓存问题导致的。

有几种方法可以尝试解决这个问题:

  • 使用-t选项,这会在每个事件之间添加时间戳,从而使输出更加精确。
  • 使用-c选项,这会清除缓存,从而使输出更加精确。
  • 尝试使用其他工具,比如input命令或者adb shell dumpsys input命令,来替代getevent。

你可以使用以下命令来获取输入事件信息:

adb shell dumpsys input

或者使用以下命令来获取输入设备信息:

adb shell dumpsys input | grep "Input Devices:"

不好回答这个问题,因为这个里面多个进程,管道,本身就会这样。

要更好的解决,可以去监听这个event结点,这样子是可以很好的处理的。

具体可以跟驱动沟通下。

因为这个里面多个进程,管道,本身就会这样。

要更好的解决,可以去监听这个event结点,这样子是可以很好的处理的。

具体可以跟驱动沟通下。

可能的原因:
数据输出速度慢:输出数据的程序运行速度慢,导致数据输出缓慢。

缓冲区满:缓冲区满,导致数据无法及时输出。

网络延迟:如果数据来自网络,网络延迟也可能导致数据获取延迟。

高负载:如果系统高负载,进程获取数据的优先级较低,导致获取数据延迟。