Adb连接超时错误
16lz
2021-01-26
com.android.ddmlib.TimeoutExceptionat com.android.ddmlib.AdbHelper.read(AdbHelper.java:686)at com.android.ddmlib.AdbHelper.read(AdbHelper.java:654)at com.android.ddmlib.AdbHelper.readAdbResponse(AdbHelper.java:217)at com.android.ddmlib.AdbHelper.setDevice(AdbHelper.java:772)at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:396)at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:347)at com.android.ddmlib.Device.executeShellCommand(Device.java:435)at com.sprd.device.DeviceManager.getMemUsage(DeviceManager.java:213)at com.sprd.main.ListTablePanel$Monitor.doInBackground(ListTablePanel.java:668)at com.sprd.main.ListTablePanel$Monitor.doInBackground(ListTablePanel.java:1)at javax.swing.SwingWorker$1.call(Unknown Source)at java.util.concurrent.FutureTask.run(Unknown Source)at javax.swing.SwingWorker.run(Unknown Source)at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)at java.lang.Thread.run(Unknown Source)
在做功能遍历的时候遇到这种问题,是因为你执行的命令需要返回结果。那么socket等待结果的过程中会有时间限制,超过时间限制就会报错。
static void read(SocketChannel chan, byte[] data, int length, int timeout) throws TimeoutException, IOException { ByteBuffer buf = ByteBuffer.wrap(data, 0, length != -1 ? length : data.length); int numWaits = 0; while (buf.position() != buf.limit()) { int count = chan.read(buf); if (count < 0) { Log.d("ddms", "read: channel EOF"); throw new IOException("EOF"); }if (count == 0) { if ((timeout != 0) && (numWaits * 5 > timeout)) { Log.d("ddms", "read: timeout"); throw new TimeoutException(); } try { Thread.sleep(5L); } catch (InterruptedException ie) { } numWaits++; } else { numWaits = 0; } } }
timeout的值为5000毫秒,也就是5秒钟。但是在read方法中不是用时间来计算的,而是通过读取文件,记录没有读到文件的次数,如果连续超过25000次。则会报timeout错误。
暂时没有好的方法解决它,因为对于ddmlib内部的错误,你能把它咋的呢。所以提供一些折中方法:
1.尽量将ddmlib的jar包更新到最新的版本
2.尽量不要使用执行命令然后等待获取返回值的命令。如果确实需要就用Java.Runtime.exec来执行吧,然后读取获得的结果,至少咱还能控制一下。
更多相关文章
- Keyguard之LockPatternView学习
- 编译android源码前的准备
- Android(安卓)Camera CTS related
- android、webService 天气预报demo
- Android.Bundle savedInstanceState 的意义用法
- Android布局 屏幕滚动方法 ScrollView
- EditText获取焦点的一系列方法
- android启动蓝牙的过程 (高通方案)
- android开发笔记之viewpager 基本使用方法