项目中遇到需要执行shell命令“getevent”获取坐标参数的需求,但是发现无法结束运行该命令的线程,后来终于发现解决方法。在此记录下。
我在线程中通过ProcessBuilder(或者Runtime.getRuntime().exec())执行命令“getevent -qlt”(需要root权限)。用过这个命令的同志都知道getevent是一个不断读取事件的命令,可以通过cmd命令行运行该命令(先进入shell:adb shell)。在我的需求中,线程执行getevent后,需要不断的读取该命令返回的数据,所以需要调用process的getInputStream(循环读取)。
当我们想结束线程的时候,仅仅调用thread的interrupt()方法,并不起作用,线程仍在执行(至少我的程序是这样的)。
原因是ProcessBuilder启动的Process没有结束。
解决方法:线程外调用Process的destroy()方法,终止掉我们的process。如有必要,再interrupt()一下。