第81-86行,整个方法的主体就是创建一个”Device List Monitor”的线程。线程运行方法run直接调用DeviceMonitor的deviceMonitorLoop方法来进行无限循环监控设备状态了。

155   private void deviceMonitorLoop()

156   {

157     do

158     {

159       try

160       {

161         if (this.mMainAdbConnection == null) {

162           Log.d("DeviceMonitor", "Opening adb connection");

163           this.mMainAdbConnection =

openAdbConnection();

164           if (this.mMainAdbConnection == null) {

165             this.mConnectionAttempt += 1;

166             Log.e("DeviceMonitor", "Connection attempts: " + this.mConnectionAttempt);

167             if (this.mConnectionAttempt > 10) {

168               if (!this.mServer.startAdb()) {

169                 this.mRestartAttemptCount += 1;

170                 Log.e("DeviceMonitor", "adb restart attempts: " + this.mRestartAttemptCount);

171               }

172               else {

173                 this.mRestartAttemptCount = 0;

174               }

175             }

176             waitABit();

177           } else {

178             Log.d("DeviceMonitor", "Connected to adb for device monitoring");

179             this.mConnectionAttempt = 0;

180           }

181         }

182

183         if ((this.mMainAdbConnection != null) &&

(!this.mMonitoring)) {

184           this.mMonitoring = sendDeviceListMonitoringRequest();

185         }

186

187         if (this.mMonitoring)

188         {

189           int length = readLength(this.mMainAdbConnection, this.mLengthBuffer);

190

191           if (length >= 0)

192           {

193             processIncomingDeviceData(length);

194

195

196             this.mInitialDeviceListDone = true;

197           }

198         }

199       }

200       catch (AsynchronousCloseException ace) {}catch (TimeoutException ioe)

201       {

202         handleExpectionInMonitorLoop(ioe);

203       } catch (IOException ioe) {

204         handleExpectionInMonitorLoop(ioe);

205       }

206     } while (!this.mQuit);

207   }

代码8-4-3 DeviceMonitor - deviceMonitorLoop

  • 第一步:163行,如果还没有连接上的ADB服务器的话就先连接上
  • 第二步: 168行,确保ADB服务器已经启动
  • 第三步: 183-185行,往ADB服务器发送监控命令,监控所有连接上来的移除的设备
  • 第四步: 处理所获得的监控设备列表

我们先看第一步,在上一节中我们已经看到ADB服务器的启动过程了,但是我们还没有看到ADB客户端是怎么连接上服务器的,一下的代码就是一个实例:

255   private SocketChannel openAdbConnection()

256   {

257     Log.d("DeviceMonitor", "Connecting to adb for Device List Monitoring...");

258

259     SocketChannel adbChannel = null;

260     try {

261       adbChannel =

SocketChannel.open(

AndroidDebugBridge.getSocketAddress());

262       adbChannel.socket().setTcpNoDelay(true);

263     }

264     catch (IOException e) {}

265

266     return adbChannel;

267   }

代码8-4-4 DeviceMonitor - openAdbConnection

转载于:https://www.cnblogs.com/poptest/p/5089490.html

老李推荐: 第8章4节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动AndroidDebugBridge 2...相关推荐

  1. 老李推荐:第5章5节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 获取系统服务引用 1...

    老李推荐:第5章5节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 获取系统服务引用 上一节我们描述了monkey的命令处理入口函数run是如何调用optionPro ...

  2. 老李推荐:第14章4节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-端口转发 1...

    老李推荐:第14章4节<MonkeyRunner源码剖析> HierarchyViewer实现原理-装备ViewServer-端口转发 在初始化HierarchyViewer的实例过程中, ...

  3. 老李推荐:第3章3节《MonkeyRunner源码剖析》脚本编写示例: MonkeyImage API使用示例 1...

    老李推荐:第3章3节<MonkeyRunner源码剖析>脚本编写示例: MonkeyImage API使用示例 在上一节的第一个"增加日记"的示例中,我们并没有看到日记 ...

  4. 老李推荐: 第8章4节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动AndroidDebugBridge 1...

    老李推荐: 第8章4节<MonkeyRunner源码剖析>MonkeyRunner启动运行过程-启动AndroidDebugBridge 上一节我们看到在启动AndroidDebugBri ...

  5. 老李推荐:第6章1节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览 1...

    老李推荐:第6章1节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览 在上一章中我们有简要的介绍了事件源是怎么一回事,但是并没有进行详细的描述.那么往下的这几个 ...

  6. 老李推荐:第6章6节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-命令队列...

    老李推荐:第6章6节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-命令队列 事件源在获得字串命令并把它翻译成对应的MonkeyEvent事件后,会把这些事件 ...

  7. 老李推荐: 第3章2节《MonkeyRunner源码剖析》脚本编写示例: MonkeyDevice API使用示例 1...

    老李推荐: 第3章2节<MonkeyRunner源码剖析>脚本编写示例: MonkeyDevice API使用示例 上一节我们学习了如何通过MonkeyRunner这个类的静态方法wait ...

  8. 老李推荐:第14章8节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-获取控件列表并建立控件树 1...

    老李推荐:第14章8节<MonkeyRunner源码剖析> HierarchyViewer实现原理-获取控件列表并建立控件树 poptest是国内唯一一家培养测试开发工程师的培训机构,以学 ...

  9. 老李推荐:第8章2节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-解析处理命令行参数...

    老李推荐:第8章2节<MonkeyRunner源码剖析>MonkeyRunner启动运行过程-解析处理命令行参数 MonkeyRunnerStarter是MonkeyRunner启动时的入 ...

  10. 第4章2节《MonkeyRunner源码剖析》ADB协议及服务: ADB服务SERVICES.TXT翻译参考(原创)

    天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文"寻求合作伙伴编写<深入理解 MonkeyRunner>书籍".但因为诸多原因,没有如愿.所以这里把草稿 ...

最新文章

  1. 一:c#基本语法(2)(老田学习笔记)
  2. 父类的析构函数定义为虚函数
  3. VUE:class与style强制绑定
  4. linux gedit如何保存 退出
  5. 【渝粤教育】广东开放大学 标准化理论与方法 形成性考核 (50)
  6. flume学习-含安装
  7. SpringBoot文件上传大小设置(yml中配置)
  8. Python一题三解:查找字符串中每个字符的首次出现
  9. 【520有奖征文】 老同学聚会,20年IT行业从业感悟
  10. linux安装vnc4server,Ubuntu 18.04安装vnc4server
  11. Vue3中的父子、子父组件通信
  12. Security+ 学习笔记1 恶意软件
  13. 仅使用Python代码从零开始进行Logistic回归
  14. 【ABC196-D】 Hanjo(dfs+状态标记)
  15. 模拟电路设计经典教材推荐
  16. FileZilla Server超详细配置
  17. Hi3516d平台的usb功能调试记录
  18. 0w1_CTF_Writeup
  19. 业余时间你在做什么,你就会变成什么样的人?
  20. 伽卡他卡免费电子教室软件_笔记

热门文章

  1. 【Linux】一步一步学Linux——iptables-restore命令(188)
  2. python字典进行大写转化_python之字典的增删改查
  3. oxford5k和paris6k数据集介绍_sklearn函数:KFold(分割训练集和测试集)
  4. exit()与_exit()函数的区别
  5. java(2)——字面常量和变量,变量的作用域,局部变量,成员变量
  6. 《iOS 应用逆向工程:分析与实战》 pdf 电子书分享
  7. pixhawk/px4如何获取及使用传感器数据
  8. CF-1207 G.Indie Album(Trie上跑AC自动机)
  9. Problem - 6111迷宫出逃
  10. HDU Problem - 1455 Sticks