老李推荐: 第8章4节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动AndroidDebugBridge 2...
第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...相关推荐
- 老李推荐:第5章5节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 获取系统服务引用 1...
老李推荐:第5章5节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 获取系统服务引用 上一节我们描述了monkey的命令处理入口函数run是如何调用optionPro ...
- 老李推荐:第14章4节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-端口转发 1...
老李推荐:第14章4节<MonkeyRunner源码剖析> HierarchyViewer实现原理-装备ViewServer-端口转发 在初始化HierarchyViewer的实例过程中, ...
- 老李推荐:第3章3节《MonkeyRunner源码剖析》脚本编写示例: MonkeyImage API使用示例 1...
老李推荐:第3章3节<MonkeyRunner源码剖析>脚本编写示例: MonkeyImage API使用示例 在上一节的第一个"增加日记"的示例中,我们并没有看到日记 ...
- 老李推荐: 第8章4节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动AndroidDebugBridge 1...
老李推荐: 第8章4节<MonkeyRunner源码剖析>MonkeyRunner启动运行过程-启动AndroidDebugBridge 上一节我们看到在启动AndroidDebugBri ...
- 老李推荐:第6章1节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览 1...
老李推荐:第6章1节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览 在上一章中我们有简要的介绍了事件源是怎么一回事,但是并没有进行详细的描述.那么往下的这几个 ...
- 老李推荐:第6章6节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-命令队列...
老李推荐:第6章6节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-命令队列 事件源在获得字串命令并把它翻译成对应的MonkeyEvent事件后,会把这些事件 ...
- 老李推荐: 第3章2节《MonkeyRunner源码剖析》脚本编写示例: MonkeyDevice API使用示例 1...
老李推荐: 第3章2节<MonkeyRunner源码剖析>脚本编写示例: MonkeyDevice API使用示例 上一节我们学习了如何通过MonkeyRunner这个类的静态方法wait ...
- 老李推荐:第14章8节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-获取控件列表并建立控件树 1...
老李推荐:第14章8节<MonkeyRunner源码剖析> HierarchyViewer实现原理-获取控件列表并建立控件树 poptest是国内唯一一家培养测试开发工程师的培训机构,以学 ...
- 老李推荐:第8章2节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-解析处理命令行参数...
老李推荐:第8章2节<MonkeyRunner源码剖析>MonkeyRunner启动运行过程-解析处理命令行参数 MonkeyRunnerStarter是MonkeyRunner启动时的入 ...
- 第4章2节《MonkeyRunner源码剖析》ADB协议及服务: ADB服务SERVICES.TXT翻译参考(原创)
天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文"寻求合作伙伴编写<深入理解 MonkeyRunner>书籍".但因为诸多原因,没有如愿.所以这里把草稿 ...
最新文章
- 一:c#基本语法(2)(老田学习笔记)
- 父类的析构函数定义为虚函数
- VUE:class与style强制绑定
- linux gedit如何保存 退出
- 【渝粤教育】广东开放大学 标准化理论与方法 形成性考核 (50)
- flume学习-含安装
- SpringBoot文件上传大小设置(yml中配置)
- Python一题三解:查找字符串中每个字符的首次出现
- 【520有奖征文】 老同学聚会,20年IT行业从业感悟
- linux安装vnc4server,Ubuntu 18.04安装vnc4server
- Vue3中的父子、子父组件通信
- Security+ 学习笔记1 恶意软件
- 仅使用Python代码从零开始进行Logistic回归
- 【ABC196-D】 Hanjo(dfs+状态标记)
- 模拟电路设计经典教材推荐
- FileZilla Server超详细配置
- Hi3516d平台的usb功能调试记录
- 0w1_CTF_Writeup
- 业余时间你在做什么,你就会变成什么样的人?
- 伽卡他卡免费电子教室软件_笔记
热门文章
- 【Linux】一步一步学Linux——iptables-restore命令(188)
- python字典进行大写转化_python之字典的增删改查
- oxford5k和paris6k数据集介绍_sklearn函数:KFold(分割训练集和测试集)
- exit()与_exit()函数的区别
- java(2)——字面常量和变量,变量的作用域,局部变量,成员变量
- 《iOS 应用逆向工程:分析与实战》 pdf 电子书分享
- pixhawk/px4如何获取及使用传感器数据
- CF-1207 G.Indie Album(Trie上跑AC自动机)
- Problem - 6111迷宫出逃
- HDU Problem - 1455 Sticks