一种基于共享管道的Android设备的调试方法与流程

文档序号:13219464阅读:259来源:国知局
技术领域本申请涉及Android技术,特别涉及一种基于共享管道的Android设备的调试方法。

背景技术:
AndroidDebugBridge,Android调试桥接器,简称adb。adb的主要功能有:运行设备的shell(命令行),管理模拟器或设备的端口映射,计算机和设备之间上传/下载文件,将本地apk软件安装至模拟器或android设备。ADB是一个客户端-服务器端程序,其中客户端是用来操作的计算机,服务器端是android设备。通过在客户端的计算机上运行ADB命令进行服务器端android设备的调试。目前,在客户端的计算机上,通常使用java程序作为ADB命令的允许环境。具体地,在java程序中,可以通过Runtime.getRuntime()获取当前JVM的运行时环境,使用exec方法执行adb命令,创建一个进程process实例,exec方法实现对Android设备的adb命令输入,利用process实例的输入流得到adb命令执行后的反馈,adb命令执行完毕后,销毁process进程。Java程序通过Runtimeexec调用adb命令,建立了java程序进程与Android设备进程的管道,实现了对Android设备的控制和交互。现有的处理方式中,当需要执行多个adb命令时,采用循环执行方式,其中每执行一个adb命令都将进行下列步骤:调用Runtime的exec方法,生成一个process进程,建立管道,执行adb命令,关闭管道,销毁process进程。但是,通过上述处理方式进行android设备调试时,当连续多次执行adb命令(大于3000次)后,会出现android设备端资源占用高和反应速度变慢的问题,严重影响用户体验,最终可能导致adb不可用的现象,影响用户正常使用。

技术实现要素:
本申请提供一种基于共享管道的Android设备的调试方法,能够避免多次执行adb命令后的反应速度变慢的问题,改善用户体验。为实现上述目的,本申请采用如下的技术方案:一种基于共享管道的Android设备的调试方法,包括:作为客户端的计算机上的目标程序服务启动后,建立用于执行Android调试桥接器ADB命令的共享管道;在所述目标程序运行过程中,利用所述共享管道执行ADB命令;在所述目标程序服务停止时,关闭所述共享管道,并释放相应的资源。较佳地,使用Runtimeexec建立所述共享管道。较佳地,所述利用所述共享管道执行ADB命令包括:监听要执行的ADB命令;当监听到ADB命令时,将该ADB命令加入ADB命令队列中;定时扫描ADB命令队列,按照加入所述队列的时间先后顺序,依次执行各个等待执行的ADB命令,当执行完任一命令后,将该命令从所述队列中移出。较佳地,所述目标程序为JAVA程序或C++程序。由上述技术方案可见,本申请中,作为客户端的计算机上的目标程序服务启动后,建立用于执行ADB命令的共享管道;在目标程序运行过程中,利用共享管道执行ADB命令,在目标程序服务停止时,关闭建立的共享管道,并释放相应的资源。通过上述处理,在执行ADB命令时,大大减少了建立管道和关闭管道的时间,从而节省系统资源,能够避免多次执行adb命令后的反应速度变慢的问题,改善用户体验。附图说明图1为现有调试Android设备时执行ADB命令的示意图;图2为本申请中基于共享管道的调试Android设备的方法示意图;图3为本申请基于共享管道的调试Android设备时执行ADB命令的示意图。具体实施方式为了使本申请的目的、技术手段和优点更加清楚明白,以下结合附图对本申请做进一步详细说明。在现有的ADB命令执行方式中,尽管在执行命令这一步所需要的时间极少,但执行前管道的建立和执行结束后管道的关闭所需花费的时间远远大于执行命令所需要的时间,造成了80%以上的时间都浪费在管道的建立和关闭上,且管道的建立需要消耗较多的资源,正是由此,致使系统负荷增加,资源占用高,耗时并且效率低。同时由于客户端程序不能控制服务器端Android设备在命令执行完成后资源的正常释放,致使连续执行多次adb命令后(大于3000次),出现Android设备端资源占用高,反应速度变慢,影响用户体验,最终导致adb不可用现象,影响用户正常使用。基于上述原因,本申请给出一种Android设备的调试方法,如图2所示,在利用客户端程序调试Android设备的过程中,仅建立一条共享管道,用于执行本次调试过程中的各条ADB命令。图3为本申请基于共享管道调试Android设备方法的流程示意图。其中,以客户端程序为JAVA程序为例进行说明。如图3所示,该方法包括:步骤301,作为客户端的计算机上的目标程序服务启动,并建立用于执行ADB命令的共享管道。客户端计算机上的java程序服务启动时,使用Runtimeexec调用建立管道,该管道在本次调试过程中,用于所有ADB命令的执行,称为共享管道。该共享管道一旦建立,直到java程序关闭时才会关闭管道。步骤302,在目标程序运行过程中,利用共享管道执行所有ADB命令。在目标程序运行过程中,为执行ADB命令,增加监听程序用于监听adb执行命令,当监听到执行命令时,将该执行命令添加到命令队列中等待执行。具体地,使用命令队列管理多个adb命令,建立定时任务对adb命令队列进行扫描,若存在等待执行的命令队列且当前系统中无正在执行的命令,根据加入的先后顺序取出加入时间最早的命令,利用共享管道,输入执行该adb命令,完成执行后从命令队列中移除该命令。所有的adb命令都使用同一个共享管道。步骤303,目标程序服务停止时,关闭共享管道,并释放相应的资源。当java程序服务停止时,关闭启动时建立的唯一共享管道,释放相关资源结束处理。至此,本申请中的Android设备调试方法流程结束。在该方法流程中,只建立了一个共享管道,直到服务停止时,才去关闭共享管道释放资源,解决了多次建立和释放管道导致的adb不可用问题,减少了多次建立和释放管道带来的资源占用多和执行效率低的问题。上述图3所示的方法中,以java程序作为目标程序为例进行了说明,在实际应用中,目标程序不限于java程序,还可以采用C++等程序,本申请对此不做限定。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1