手机app进行monkey app测试,得到的结果总是0ms mobile, 0ms wifi,*****not connected

您所在的位置: &
基于PhoneGap与Java开发的Android应用的性能对比(2)
基于PhoneGap与Java开发的Android应用的性能对比(2)
百度搜索研发部博客
此次的调研的重点是针对一个Android应用的基础需求,用phonegap与Java实现的应用在性能及开发成本等方面的对比。本次选择用phonegap和Java各自实现一个ListView的内容展现功能的应用;同时引入另外一个常用组件GridView来实现图片浏览的功能应用。
空间图片浏览应用
一、应用功能描述
在应用中创建一个gridview方式展示的图片列表。 图片总数 48, 16行3列。 原生app使用gridview布局和渲染。webapp使用了jquery和jquery.mobile(后者依赖前者)
二、应用界面截图
1、PhoneGap mm100 photo viewer
498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="640" height="522" title=" 14-43-16" alt="" src="http://stblog./wp-content/uploads/wp-display-data.php?filename=-14-43-.jpg&type=image%2Fjpeg&width=851&height=696" />
2、Android Java
mm100 photo viewer
498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="640" height="528" title=" 14-44-18" alt="" src="http://stblog./wp-content/uploads/wp-display-data.php?filename=-14-44-.jpg&type=image%2Fjpeg&width=845&height=695" />
三、功能测试对比
【测试机器为 Google Nexus One G5】
Android应用类型
Html5 (phonegap)
jQuery与jQuery Mobile基础库
GridView组件
40.6MB(RSS)
29.9MB(RSS)
约7秒(js大小会直接影响速度)
操作响应速度
在内容比较多的时候,都不是很流畅。调用外部交互:弹窗提示为例,会比原生大约有1s的延迟。
在内容比较多的时候,都不是很流畅。调用外部交互:原生app基本上瞬间响应。
Monkey注入5万个事件测试结果
Events injected: 50000:Dropped: keys=20 pointers=72 trackballs=0 flips=0
## Network stats: elapsed time=1460305ms (0ms mobile, 1440448ms wifi, 19857ms not connected)
// Monkey finished
Events injected: 30002:Dropped: keys=7 pointers=10 trackballs=0 flips=0
## Network stats: elapsed time=230436ms (0ms mobile, 230436ms wifi, 0ms not connected)
** System appears to have crashed at event 30002 of 50000 using seed 0
由于交互深度较浅,所以整个Monkey测试过程较为流畅,但是还测试完毕后还是存在WebView内存无法释放的情况。
整个Monkey测试过程较流畅。
Webapp占用内存约40.6M,占用应该主要是由于webapp是基于浏览器的,并且加载了一个java库所致。所以资源占用应该不是线性的。
占用内存约29.9M,内存占用相对比较稳定。
对于比较简单的应用,在同样具备完善基础库的条件下,两者开发难度基本一致。
1.内存优化:webapp因为是基于浏览器的,而浏览器自身是进行了相应的优化的,所以在图片显示上很不错。
原生app如果在一页中显示比较多的图片的时候,必须比较细致完善的进行内存优化工作,否则极易出现因为图片资源过大而引起的崩溃问题。
2.图片缩放裁切 webapp一般情况下通过js和css来进行缩放裁切。在进行图片动态缩放的时候,页面显示情况不是很正常(抖动,跳跃)。最好的办法是后端服务器对图片处理后再发送给手机端。
原生app可以直接通过java来对图片进行处理。
3.布局 原生app可以利用android提供的特殊技术方案,来自动适应多种分辨率的屏幕。如9png 和 多drawable目录。 相当简单方面。 但是在交互方面,原生app的开发量会比较大。
webapp就比较杯具一些了,需要开发者比较多的关注。 可以通过js来动态的获取屏幕尺寸进行资源调整和加载(开发几套不同的ui,然后根据分辨率js动态加载),这个会花费比较多的时间。
webapp js调试不太方便,特别是调用外部应用的时候。如果是本应用内部,可以通过firebug进行调试。
此次对比主要集中在对大量数据通信下web app UI性能。通过与Java app相比较,web app的UI性能会比Java app的UI性能差。主要原因是依赖webkit浏览器内核的渲染解析能力。同时在只有一个WebView的情况下,如何控制内存的上涨速度以无法释放内存的情况无缝地重新启动WebView从而不影响用户体验,是一个现实待解决问题。
在非大数据量且不需要频繁更新UI的情况下,基于wekit浏览器phonegap模式还是可以满足Android开发应用的需求。同时应用的实现的效率还依赖于OPOA开发模式的Javascript基础架构是否强大和高效。
对于不同分辨率的屏幕,需要通过JS或者通过要集成的框架封装来解决适配的问题。同时由于不同版本的Android所集成的webkit的版本不同,同样也需要处理不同版本的在JavaScript和CSS支持上不同的兼容性问题。还有解决开发时多人协作及方便的调试工具集成,也是进行html5 app开发的重要前提条件。
此次对比主要集中在对大量数据通信下web app UI性能。通过与Java app相比较,web app的UI性能会比Java app的UI性能差。主要原因是依赖webkit浏览器内核的渲染解析能力。同时在只有一个WebView的情况下,如何控制内存的上涨速度以无法释放内存的情况无缝地重新启动WebView从而不影响用户体验,是一个现实待解决问题。
在非大数据量且不需要频繁更新UI的情况下,基于wekit浏览器phonegap模式还是可以满足Android开发应用的需求。同时应用的实现的效率还依赖于OPOA开发模式的Javascript基础架构是否强大和高效。
对于不同分辨率的屏幕,需要通过JS或者通过要集成的框架封装来解决适配的问题。同时由于不同版本的Android所集成的webkit的版本不同,同样也需要处理不同版本的在JavaScript和CSS支持上不同的兼容性问题。还有解决开发时多人协作及方便的调试工具集成,也是进行html5 app开发的重要前提条件。
【编辑推荐】
【责任编辑: TEL:(010)】
内容导航&第 1 页: &第 2 页:
关于&&&&的更多文章
PhoneGap宣传的是唯一一个同时支持6种移动平台的中间件,因为它
网友评论TOP5
随着云计算、物联网、大数据、移动互联网的大发展,你应该知道这些。
Titanium是一个Web应用程序运行环境,它支持不同的系
今天是个特别的节日,每个没有女友、老婆的IT男对一年
本页面收集各个PhoneGap的中文API内容,整理为PhoneGa
Python是目前流行的脚本语言之一。本书由浅入深、循序渐进地讲解如何使用Python进行程序开发。全书内容包括Python安装、开发工具
Windows Phone专家
Android开发专家
51CTO旗下网站Monkey&log分析说明
运行命令:
adb&shell&monkey&-p&com.crazyhornets.MyHokageAndroidZSY&-v&-v&-v&20&--&throttle&1000
:Monkey:&seed=0&count=20&//伪随机种子为,事件总数
:AllowPackage:&com.crazyhornets.MyHokageAndroidZSY&//包名
:IncludeCategory:&android.intent.category.LAUNCHER&//包含的类别
:IncludeCategory:&android.intent.category.MONKEY
//&Selecting&main&activities&from&category&android.intent.category.LAUNCHER&//选择主
//&&&-&NOT&USING&main&activity&com.miui.barcodescanner.activity.CaptureActivity&(from&package&com.miui.barcodescanner)//这些都不是指定的包的
//&&&-&NOT&USING&main&activity&com.android.browser.BrowserActivity&(from&package&com.android.browser)
//&&&-&NOT&USING&main&activity&com.android.calculator2.Calculator&(from&package&com.android.calculator2)
//&&&-&NOT&USING&main&activity&com.android.calendar.AllInOneActivity&(from&package&com.android.calendar)
//&&&-&NOT&USING&main&activity&com.android.camera.Camera&(from&package&com.android.camera)
//&&&-&NOT&USING&main&activity&com.android.contacts.activities.PeopleActivity&(from&package&com.android.contacts)
//&&&-&NOT&USING&main&activity&com.android.contacts.activities.TwelveKeyDialer&(from&package&com.android.contacts)
//&&&-&NOT&USING&main&activity&com.android.deskclock.DeskClockTabActivity&(from&package&com.android.deskclock)
//&&&-&NOT&USING&main&activity&com.android.email.activity.Welcome&(from&package&com.android.email)
//&&&-&NOT&USING&main&activity&com.android.fileexplorer.FileExplorerTabActivity&(from&package&com.android.fileexplorer)
//&&&-&NOT&USING&main&activity&com.miui.gallery.app.Gallery&(from&package&com.miui.gallery)
//&&&-&NOT&USING&main&activity&com.android.mms.ui.MmsTabActivity&(from&package&com.android.mms)
//&&&-&NOT&USING&main&activity&com.android.settings.MiuiSettings&(from&package&com.android.settings)
//&&&-&NOT&USING&main&activity&com.android.thememanager.ThemeResourceTabActivity&(from&package&com.android.thememanager)
//&&&-&NOT&USING&main&activity&com.miui.weather2.ActivityWeatherCycle&(from&package&com.miui.weather2)
……//中间的省略,从这也可以看出你手机上都安装了哪些应用
//&&&+&Using&main&activity&com.crazyhornets.MyHokage.MyHokageActivity&(from&package&com.crazyhornets.MyHokageAndroidZSY)
//这个就是我们指定的包的
//&Selecting&main&activities&from&category&android.intent.category.MONKEY&
//&&&-&NOT&USING&main&activity&com.miui.home.launcher.Launcher&(from&package&com.miui.home)
//&&&-&NOT&USING&main&activity&com.android.settings.Settings$RunningServicesActivity&(from&package&com.android.settings)
//&&&-&NOT&USING&main&activity&com.android.settings.Settings$StorageUseActivity&(from&package&com.android.settings)
//&&&-&NOT&USING&main&activity&com.android.settings.applications.ManageApplicationsActivity&(from&package&com.android.settings)
//&Seeded:&0&//种子为
//&Event&percentages:&//事件百分比
//&&&0:&15.0%
//&&&1:&10.0%
//&&&2:&2.0%
//&&&3:&15.0%
//&&&4:&-0.0%
//&&&5:&25.0%
//&&&6:&15.0%
//&&&7:&2.0%
//&&&8:&2.0%
//&&&9:&1.0%
//&&&10:&13.0%
//表示跳转到包中的里
:Switch:&#Iaction=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x;component=com.crazyhornets.MyHokag
eAndroidZSY/com.crazyhornets.MyHokage.MyHokageAend
//允许此跳转
&&&&//&Allowing&start&of&Intent&{&act=android.intent.action.MAIN&cat=[android.intent.category.LAUNCHER]&cmp=com.crazyhornets.MyHokageAndroidZSY/com.cr
azyhornets.MyHokage.MyHokageActivity&}&in&package&com.crazyhornets.MyHokageAndroidZSY
//以下就是事件间的延迟和发送的各种事件
Sleeping&for&0&milliseconds
:Sending&Key&(ACTION_DOWN):&22&&&&//&KEYCODE_DPAD_RIGHT
:Sending&Key&(ACTION_UP):&22&&&&//&KEYCODE_DPAD_RIGHT
Sleeping&for&0&milliseconds
:Sending&Key&(ACTION_DOWN):&23&&&&//&KEYCODE_DPAD_CENTER
:Sending&Key&(ACTION_UP):&23&&&&//&KEYCODE_DPAD_CENTER
Sleeping&for&0&milliseconds
:Sending&Flip&keyboardOpen=false
Sleeping&for&0&milliseconds
:Sending&Key&(ACTION_DOWN):&20&&&&//&KEYCODE_DPAD_DOWN
:Sending&Key&(ACTION_UP):&20&&&&//&KEYCODE_DPAD_DOWN
Sleeping&for&0&milliseconds
:Sending&Touch&(ACTION_DOWN):&0:(313.0,419.0)
:Sending&Touch&(ACTION_UP):&0:(313.512)
Sleeping&for&0&milliseconds
:Sending&Key&(ACTION_DOWN):&82&&&&//&KEYCODE_MENU
:Sending&Key&(ACTION_UP):&82&&&&//&KEYCODE_MENU
Sleeping&for&0&milliseconds
:Sending&Touch&(ACTION_DOWN):&0:(427.0,730.0)
:Sending&Touch&(ACTION_UP):&0:(432.1)
Sleeping&for&0&milliseconds
:Sending&Trackball&(ACTION_MOVE):&0:(-1.0,-1.0)
:Sending&Trackball&(ACTION_MOVE):&0:(-5.0,0.0)
:Sending&Trackball&(ACTION_MOVE):&0:(3.0,4.0)
:Sending&Trackball&(ACTION_MOVE):&0:(0.0,4.0)
:Sending&Trackball&(ACTION_MOVE):&0:(3.0,-5.0)
:Sending&Trackball&(ACTION_MOVE):&0:(-2.0,0.0)
Events&injected:&20&//注入事件
:Sending&rotation&degree=0,&persist=false&//发送屏幕翻转&度,存留假
:Dropped:&keys=0&pointers=0&trackballs=0&flips=0&rotations=0&//丢弃:键,指针,轨迹球,键盘轻弹,屏幕翻转
##&Network&stats:&elapsed&time=265ms&(0ms&mobile,&265ms&wifi,&0ms&not&connected)&//网络状态:占用时间(手机,,未连接)
//&Monkey&finished&//Monkey测试完成
从例子中可以看出,该程序在这次测试中没有问题,若程序出现问题终端将打印出异常供程序员查找错误。
以下内容为android系统中的keycode值,在以后的调试中会经常需要查询:
KEYCODE_UNKNOWN=0;
KEYCODE_SOFT_LEFT=1;
KEYCODE_SOFT_RIGHT=2;
KEYCODE_HOME=3;
KEYCODE_BACK=4;
KEYCODE_CALL=5;
KEYCODE_ENDCALL=6;
KEYCODE_0=7;
KEYCODE_1=8;
KEYCODE_2=9;
KEYCODE_3=10;
KEYCODE_4=11;
KEYCODE_5=12;
KEYCODE_6=13;
KEYCODE_7=14;
KEYCODE_8=15;
KEYCODE_9=16;
KEYCODE_STAR=17;&&&&&&//-----------------------------------
KEYCODE_POUND=18;
KEYCODE_DPAD_UP=19;
KEYCODE_DPAD_DOWN=20;
KEYCODE_DPAD_LEFT=21;
KEYCODE_DPAD_RIGHT=22;
KEYCODE_DPAD_CENTER=23;
KEYCODE_VOLUME_UP=24;
KEYCODE_VOLUME_DOWN=25;
KEYCODE_POWER=26;
KEYCODE_CAMERA=27;
KEYCODE_CLEAR=28;&&&&//-----------------------------------
KEYCODE_A=29;
KEYCODE_B=30;
KEYCODE_C=31;
KEYCODE_D=32;
KEYCODE_E=33;
KEYCODE_F=34;
KEYCODE_G=35;
KEYCODE_H=36;
KEYCODE_I=37;
KEYCODE_J=38;
KEYCODE_K=39;
KEYCODE_L=40;
KEYCODE_M=41;
KEYCODE_N=42;
KEYCODE_O=43;
KEYCODE_P=44;
KEYCODE_Q=45;
KEYCODE_R=46;
KEYCODE_S=47;
KEYCODE_T=48;
KEYCODE_U=49;
KEYCODE_V=50;
KEYCODE_W=51;
KEYCODE_X=52;
KEYCODE_Y=53;
KEYCODE_Z=54;
KEYCODE_COMMA=55;&&&&//-----------------,------------------
KEYCODE_PERIOD=56;&&&&//-----------------.------------------
KEYCODE_ALT_LEFT=57;
KEYCODE_ALT_RIGHT=58;
KEYCODE_SHIFT_LEFT=59;
KEYCODE_SHIFT_RIGHT=60;
KEYCODE_TAB=61;
KEYCODE_SPACE=62;
KEYCODE_SYM=63;
KEYCODE_EXPLORER=64;&//-----------------------------------
KEYCODE_ENVELOPE=65;&&//---------------信封--------------------
KEYCODE_ENTER=66;&&&&&
KEYCODE_DEL=67;
KEYCODE_GRAVE=68;&&//---------------坟墓--------------------
KEYCODE_MINUS=69;&&//---------------负--------------------
KEYCODE_EQUALS=70;&&//--------------等于(=)---------------------
KEYCODE_LEFT_BRACKET=71;&&//----------------------------
KEYCODE_RIGHT_BRACKET=72;&&//----------------------------
KEYCODE_BACKSLASH=73;&&//-------------反斜线\---------------
KEYCODE_SEMICOLON=74;&&//--------------;--------------
KEYCODE_APOSTROPHE=75;&//---------------’-------------
KEYCODE_SLASH=76;&&&&&&&&&//--------------/?--------------
KEYCODE_AT=77;&&&&&&&&&&&//------------------@---------------
KEYCODE_NUM=78;
KEYCODE_HEADSETHOOK=79;&&//----------------------------
KEYCODE_FOCUS=80;//*Camera*focus
KEYCODE_PLUS=81;&&&//------------+----------------
KEYCODE_MENU=82;
KEYCODE_NOTIFICATION=83;&&&//----------------------------
KEYCODE_SEARCH=84;&
KEYCODE_MEDIA_PLAY_PAUSE=85;
KEYCODE_MEDIA_STOP=86;
KEYCODE_MEDIA_NEXT=87;
KEYCODE_MEDIA_PREVIOUS=88;
KEYCODE_MEDIA_REWIND=89;&&//------------倒带----------------
KEYCODE_MEDIA_FAST_FORWARD=90;&
KEYCODE_MUTE=91;&&//-----------静音-----------------
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。android monkey throttle是否会延迟event总的执行时间?
shell@shamu:/ $ monkey --throttle ;date
Tue Dec 15 14:31:27 CST 2015
// activityResuming(com.google.android.packageinstaller)Events injected: 100## Network stats: elapsed time=18308ms (0ms mobile, 0ms wifi, 18308ms not connected)Tue Dec 15 14:31:46 CST 2015shell@shamu:/ $ 如上执行的结果,我想看到 monkey在 Moto Nexus 6 上运行的时间长短。按理来说,应该是1000ms*100=100s,但是为什么执行的时间是18s左右。而且打印的系统时间上,也可以看到只有19秒的时间差,远比预期的100秒短。请赐教,谢谢。~~~~~~~~~~~~~~~~~~~~~~~~~~~~网友回复:
【android monkey throttle是否会延迟event总的执行时间?】
请将本文分享给你的朋友:
android monkey throttle是否会延迟event总的执行时间? 的相关文章
------分隔线----------------------------
北京联盟郑重声明:本文仅代表作者个人观点,与北京联盟无关。其原创性及文中陈述内容未经本站证实,北京联盟对本文及其中全部或者部分内容的真实性、完整性、及时性不作任何保证和承诺,请网友自行核实相关内容。

我要回帖

更多关于 app monkey测试 的文章

 

随机推荐