#34;类型"之间的延迟AdbClient中的命令(monkeyrunner中不存在)

时间:2014-05-30 20:49:43

标签: android python monkeyrunner androidviewclient

我正在从monkeyrunner切换到AndroidViewClient。这很好,因为它都是Python。但是,在发出type或press命令时,每个命令之间的延迟就像一秒钟:

import sys
import os
import time
try:
    sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
except:
    pass

from com.dtmilano.android.adb.adbclient import AdbClient, Device        

device.type("hello")
# type a space
device.press('KEYCODE_SPACE', 'DOWN_AND_UP')
device.type("world")

monkeyrunner上面的代码在“按”和“类型”之间几乎没有延迟。为什么AdbClient产生这种延迟?它不是通过adb shell吗?它应该很快......

注意:“hello”和“world”的输入速度很快。每种类型命令之间只有1秒的延迟。

2 个答案:

答案 0 :(得分:2)

迭戈在他的根本原因分析中是错误的。新的shell连接并不昂贵。花费最多时间的是开始一个新的java进程 - 因为device.type()正在执行adb shell input textinput是一个控制台java应用程序。

Monkeyrunner更快,因为它的设备端java进程只启动一次。所以不幸的是,持久的shell连接对你没有多大帮助。

此外,我尝试将java运行时从Dalvik切换到ART,希望它能帮助Java应用程序启动时间。它确实减少了大约20%(从我尝试过的单位上减少了0.82秒到0.65秒)。

答案 1 :(得分:0)

命令之间有一些延迟的原因是adbclient主要使用shell连接来发送它们。此shell连接未保持打开状态。 monkeyrunner使用套接字向monkey发送命令,从而为什么命令之间的延迟最小。 adbclient可以重新使用开放的shell广告联盟,或者socket monkey打开monkeyrunner

这并不难实现,但尚未在路线图中实施。无论如何,总是欢迎补丁。

另一方面,对于其他最常见的情况,adbclient的速度提高了几倍http://dtmilano.blogspot.ca/2013/09/androidviewclientculebra-takesnapshot.html