Android下如何获取App启动时间

合集下载

Android一个app启动另一个app

Android一个app启动另一个app

Android⼀个app启动另⼀个app最近,⼀个app启动另⼀个app,这个玩法挺⽕的嘛,有没有试过更新QQ到5.1版本,QQ的健康⾥⾯就可以添加其他app,实现从QQ跳转到其他app应⽤。

这个挺好玩的,⼀下⼦带来了多少流量啊。

⼀、先来⼏⾏代码,⼀个app启动另⼀个app// 通过包名获取要跳转的app,创建intent对象Intent intent = getPackageManager().getLaunchIntentForPackage("com.example.liuxiang");// 这⾥如果intent为空,就说名没有安装要跳转的应⽤嘛if (intent != null) {// 这⾥跟Activity传递参数⼀样的嘛,不要担⼼怎么传递参数,还有接收参数也是跟Activity和Activity传参数⼀样intent.putExtra("name", "Liu xiang");intent.putExtra("birthday", "1983-7-13");startActivity(intent);} else {// 没有安装要跳转的app应⽤,提醒⼀下Toast.makeText(getApplicationContext(), "哟,赶紧下载安装这个APP吧", Toast.LENGTH_LONG).show();}这⾥或许⽹上有很多类似代码,还是提⼀下,让⼤家知道流程。

⼆、被启动的app如何获取参数呢?public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);Intent intent = getIntent();Bundle bundle = intent.getExtras();if (bundle != null) {String name = bundle.getString("name");String birthday = bundle.getString("birthday");if (name != null && birthday != null) {Toast.makeText(getApplicationContext(), "name:" + name + " birthday:" + birthday, Toast.LENGTH_SHORT).show();}}}}在被打开的app应⽤,也是简单地⼏⾏代码可以接收到传过来的参数信息。

Android性能优化

Android性能优化

•一、App启动速度优化•二、App内存优化•三、App绘制优化•四、App瘦身•五、APP电量优化App启动速度优化一、认识启动加速含义从点击图标到用户可操作的全部过程意义避免用户一安装应用就卸载分类•冷启动•热启动•温启动过程冷启动前•1、点击相应应用图标•2、App启动之后立即展示一个空白的Window(预览窗口显示)•3、创建App进程冷启动后•1、创建App对象•2、启动Main Thread•3、创建启动的Activity对象,闪屏显示•4、创建启动的MainActivity对象,主页显示•5、其它工作二、优化工具力求获取准确的数据评估1、TraceView性能损耗太大,得出的结果并不真实作用:主要做热点分析,得到两种数据•单次执行最耗时的方法•执行次数最多的方法使用:•1、代码中添加:Debug.startMethodTracing()、检测方法、Debug.stopMethodTracing()•2、打开Profile->CPU->点击Record->点击Stop->查看Profile下方Top Down/Bottom Up找出耗时的热点方法。

2、Systrace+函数插桩Systrace原理在系统的一些关键链路(如SystemServcie、虚拟机、Binder驱动)插入一些信息(Label),通过Label的开始和结束来确定某个核心过程的执行时间,然后把这些Label信息收集起来得到系统关键路径的运行时间信息,最后得到整个系统的运行性能信息。

Android Framework里面一些重要的模块都插入了label信息(Java 层通过android.os.Trace类完成, native层通过ATrace宏完成),用户App中可以添加自定义的Lable。

特性•系统版本越高,Android Framework中添加的系统可用Label就越多,能够支持和分析的系统模块也就越多。

Android 避免APP启动闪黑屏的解决办法(Theme和Style)

Android 避免APP启动闪黑屏的解决办法(Theme和Style)
android:theme="Theme.Translucent" //透明背景
android:theme="Theme.Translucent.NoTitleBar" //透明背景并无标题
android:theme="Theme.Translucent.NoTitleBar.Fullscreen" //透明背景并无标题,全屏
上面我定义了两种Theme,第一种Theme就是设置一张背景图。当程序启动时,首先显示这张背景图,避免出现黑屏。第二种Theme是把样式设置为透明,程序启动后不会黑屏而是整个透明了,等到界面初始化完才一次性显示出来。下面说说两种方式的优缺点:
?Theme1 程序启动快,界面先显示背景图,然后再刷新其他界面控件。给人刷新不同步感觉。
android:theme="Theme.Wallpaper" //用系统桌面为应用程序背景
android:theme="Theme.Wallpaper.NoTitleBar" //用系统桌面为应用程序背景,且无标题栏
android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen" //用系统桌面为应用程序背景,无标题栏,全屏
Style可以理解为一组属性集合,方便不同的View设置使用,我们在View里面使用Style的时候,跟使用Theme是一样的应用方法。那么Style和Theme有什么区别?
下面列出两者区别:
?样式用在单独的View,如:Button、TextView等

Android移动应用开发基础教程教学大纲

Android移动应用开发基础教程教学大纲

《Android移动应用开发基础教程》教学大纲学时:六二代码:适用专业:制定:审核:批准:一,课程地地位,质与任务Android移动应用开发基础是普通高等学校计算机科学与技术专业地一门重要地专业基础课。

通过本课程地学,使学生能够在已有地计算机基础知识基础上,对Android移动应用开发有一个系统地,全面地了解,为掌握移动应用开发打下良好地基础;在系统理解与掌握Android移动应用开发基本原理地基础上,了解与掌握移动应用开发地基本原理与方法,具有设计与开发Android移动应用APP地基本能力。

Android移动应用开发是一门实践非常强地学科,它要求学生在理解与掌握Android移动应用开发语言语法地基础上,充分利用实验课程,在计算机上动手完成程序地编写与调试。

二,课程教学基本要求一.课程教学以Android移动应用开发方法为主,在教学过程让学生掌握Android移动应用开发地基本原理与方法。

二.要求在教学过程合理安排理论课时与实验课时,让学生有充分地使用在计算机上练理论课程学到地Android移动应用开发技巧与方法。

三,课程地内容第一章 Android开发起步让学生了解Android台特点,体系架构与版本,掌握如何搭建Android开发环境,熟悉如何创建Android项目与Android编程地日志工具第二章 Android核心组件:活动让学生了解Android核心组件之一地活动是什么,活动生命周期,掌握活动基本操作,在活动使用Intent,在活动之间传递数据,活动地启动模式。

第三章 UI设计让学生熟练掌握线布局,相对布局,通用UI组件,消息通知与菜单。

第四章广播机制让学生了解广播机制,并熟练掌握如何使用广播接收器。

第五章数据存储让学生熟练掌握Android文件存储,享存储与SQLite数据库存储。

第六章多媒体让学生熟练掌握播放多媒体文件,记录声音,使用摄像头与相册。

第七章网络与数据解析让学生熟练掌握使用WebView,解析XML格式数据与解析JSON数据。

Android手机上,利用bat脚本模拟用户操作

Android手机上,利用bat脚本模拟用户操作

Android⼿机上,利⽤bat脚本模拟⽤户操作利⽤bat脚本模拟⽤户操作,需要⽤到两点:①就是adb命令了,adb命令可以⽤来模拟⽤户在⼿机上的操作②bat语⾔,就是批处理语⾔,主要⽤来进⾏逻辑处理,跟众多语⾔语法⼀样,批处理语⾔也包括for循环、if语句之类的语法;⼀、adb命令⾸先我们来介绍模拟⽤户在⼿机上操作的adb命令input keyevent //发送键盘事件⽤法说明:adb shell input keyevent “value”usage: input ...input text <string> //在EditText中输⼊字符串input keyevent <key code number or name> //模拟back键、home键、⾳量键等操作input tap <x> <y> //模拟点击事件input swipe <x1> <y1> <x2> <y2> //模拟滑动事件看看上⾯的这四个命令是不是已经满⾜你⽇常使⽤了呢?先列举input keyevent⼏个⽐较常⽤的code值:input keyevent 3 // Homeinput keyevent 4 // Backinput keyevent 19 //Upinput keyevent 20 //Downinput keyevent 21 //Leftinput keyevent 22 //Rightinput keyevent 23 //Select/Okinput keyevent 24 //Volume+input keyevent 25 // Volume-input keyevent 82 // Menu 菜单~~~下⾯来举个栗⼦:①你可以先进⼊到adb shell中,再执⾏input keyevent "value",如下,看看是不是执⾏了home键的操作呢:shell@android:/ $ input keyevent 3②你也可以不进⼊adb shell中,直接执⾏(在bat脚本中写的时候当然要⽤这种啦~),如下:adb shell input tap 1431850 //这是点击了横坐标为143、纵坐标为1850的像素点adb shell input swipe 200100444666 //这是从坐标点(200,100)滑动到了坐标(444,666)========================================【快速获取想要点击图标像素点的技巧:】想要点击某个button,但是怎么快速获取该button的像素位置呢?⼀般Android在[设置--⾼级设置--开发者选项]中,或者[设置--开发⼈员选项]中,有“指针位置”这⼀项,打开该开关不要怀疑⽔印,我是从⾃⼰博客拿过来的:)如上图,⽅框的位置就是你所点击的区域坐标点,注意,原坐标[0, 0]就是⼿机屏幕的左上⾓。

浅谈android性能优化之启动过程(冷启动和热启动)

浅谈android性能优化之启动过程(冷启动和热启动)

浅谈android性能优化之启动过程(冷启动和热启动)本⽂介绍了浅谈android性能优化之启动过程(冷启动和热启动) ,分享给⼤家,具体如下:⼀、应⽤的启动⽅式通常来说,启动⽅式分为两种:冷启动和热启动。

1、冷启动:当启动应⽤时,后台没有该应⽤的进程,这时系统会重新创建⼀个新的进程分配给该应⽤,这个启动⽅式就是冷启动。

2、热启动:当启动应⽤时,后台已有该应⽤的进程(例:按back键、home键,应⽤虽然会退出,但是该应⽤的进程是依然会保留在后台,可进⼊任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应⽤,这个⽅式叫热启动。

特点1、冷启动:冷启动因为系统会重新创建⼀个新的进程分配给它,所以会先创建和初始化Application类,再创建和初始化MainActivity类(包括⼀系列的测量、布局、绘制),最后显⽰在界⾯上。

2、热启动:热启动因为会从已有的进程中来启动,所以热启动就不会⾛Application这步了,⽽是直接⾛MainActivity(包括⼀系列的测量、布局、绘制),所以热启动的过程只需要创建和初始化⼀个MainActivity就⾏了,⽽不必创建和初始化Application,因为⼀个应⽤从新进程的创建到进程的销毁,Application只会初始化⼀次。

⼆、应⽤的启动过程冷启动启动流程:当点击app的启动图标时,安卓系统会从Zygote进程中fork创建出⼀个新的进程分配给该应⽤,之后会依次创建和初始化Application类、创建MainActivity类、加载主题样式Theme中的 windowBackground等属性设置给MainActivity以及配置Activity层级上的⼀些属性、再inflate布局、当onCreate/onStart/onResume⽅法都⾛完了后最后才进⾏contentView的measure/layout/draw显⽰在界⾯上,所以直到这⾥,应⽤的第⼀次启动才算完成,这时候我们看到的界⾯也就是所说的第⼀帧。

Androidapp性能测试小结(7个性能指标)

Androidapp性能测试小结(7个性能指标)

Androidapp性能测试⼩结(7个性能指标)1.性能测试的⼏个指标:2.性能测试环境准备:3.启动时间3.1,监控值的获取⽅法启动分为冷启动和热启动,冷启动:应⽤程序⾸次启动,进程⾸次创建并加载资源的过程;热启动:应⽤程序启动后点“back”键、“Home”键,应⽤程序退到后台,并未被完全“杀死”的状态,再次启动;3.1.1,冷启动启动App命令:adb shell am start -W -n package/activity 停⽌App命令:adb shell am force-stop package获取package/activity的⽅法:1.先执⾏监控指令 adb logcat | grep START,再启动程序,⽣成的log信息中可以查看该程序的包名和activity 名ThisTime:647 这条信息中的时间就作为这次应⽤启动的耗时3.1.2,热启动启动App命令:adb shell am start -W -n package/activity 停⽌App命令:adb shell input keyevent 3 (发送⼀个keyevent事件,3代表点击⼿机上的“back”键)ThisTime:427 这条信息中的时间就作为这次应⽤启动的耗时3.2,“启动时间”监控的脚本实现“启动时间”监控的脚本实现有两种⽅式:1.获取命令执⾏时间,作为启动时间参考值;2.在命令前后加上时间戳,以差值作为参考值(此种⽅式相对更精准)脚本中需要创建两个类以及⽅法:脚本实现如图1、2得到的数据在csv⽂件中,数据分析时去掉第⼀次的数据,取均值,并绘制出⼀个数据曲线,得到的均值的参考价值的体现⽅式有两种形式:1.取竞品的数据作为对⽐(⽐如测试的是google浏览器,⽤其他浏览器做对⽐);2.取历史版本的数据做对⽐(版本间对⽐,看最新版本的开发过程中是否造成了启动时间的延长)3.2.2,时间戳差值监控⽤到的类以及⽅法:4,CPU监控值的获取⽅法、脚本实现和数据分析4.1获取⽅法:取图中第⼀个百分数作为cpu状态值脚本实现如图3、4注意:关于cpu的状态测试的时间要稍长⼀些,需要配合⼀个⾃动化脚本来实现对设备的操作,例如重复搜索100次,同时执⾏监控命令,来获取搜索100次之后的cpu状态值5,流量监控值的获取⽅法、脚本实现和数据分析5.1获取⽅法:1.⾸先要获取进程的ID,命令:adb shell ps | grep packagename;,如图中的“5715”就是我们想要的进程的ID。

APPcrawler基础原理解析及使用

APPcrawler基础原理解析及使用

APPcrawler基础原理解析及使⽤⼀、背景⼀年前,我们⼀直在⽤monkey进⾏Android 的稳定性测试,主要⽬的就是为了测试app 是否会产⽣Crash,是否会有ANR,页⾯错误等问题,在monkey测试过程中,实现了脱离Case的依赖,但是monkey测试完全随机、不可控,并且只⽀持Android系统,不⽀持iOS系统;然⽽在我们不断的实践中发现,monkey测试已经不能满⾜于我们的部分业务需求,⽐如说我们想让稳定性测试更灵活、跨端⽀持iOS、⽇志可读、定向场景设计、测指定页⾯的稳定性、报告清晰展⽰遍历结果等等,monkey在这些⽅⾯的实现局限性很⼤,经过我们调研发现开源⼯具appcrawler已然⽀持这些⽅⾯,在我们最近⼏个版本的appcrawler使⽤过程中,能够满⾜我们复杂的业务测试需求,弥补了monkey测试的不⾜,下⾯我详细的介绍这个⾃动化UI遍历⼯具-appcrawler。

⼆、appcrawler UI⾃动化遍历⼯具介绍appcrawler,使⽤Scala编程语⾔运⾏在JVM上,它是基于app爬⾍的思想,逐渐形成了⼀种⾃动化测试⽅法称为“UI遍历”,其主导思想是尽可能多的去操作被测app的界⾯元素,每个元素⾄少操作⼀遍。

⽀持android和iOS,⽀持真机和模拟器,最⼤的特点是灵活性,可通过配置来设定遍历的规则,⽤于⾃动化回归测试,实现对整个APP的所有可点击元素进⾏遍历点击。

⾃动遍历的价值回归测试,遍历基本的界⾯,了解主要界⾯的可⽤性,⽐如兼容性,基本功能;利⽤遍历获取app的加载时间和性能数据,需要借助其他的性能数据抓取⼯具,⽐如OneApm,NewRelic;利⽤遍历验证app的内存泄漏以及稳定性等功能,需要借助LeakCanary和MLeaksFinder;UI diff 验证新⽼版本的功能差异,并识别细节的问题;抓取接⼝请求辅助验证⼀些模块基本接⼝,并辅助分析接⼝调⽤流程,为接⼝测试做准备;三、为什么⽤这个⼯具1. ⽀持android和iOS,⽀持真机和模拟器;2. 可通过配置来设定遍历的规则(⽐如设置⿊名单和⽩名单,提⾼遍历的覆盖率);3. 其本⾝的遍历深度覆盖较全,⽐如它拥有APP的dom树,根据每个activity下的可点击元素逐个点击,⽐monkey更具有规律性,覆盖更全⾯;4. ⽣成的报告附带截图,可以精确看到点击了哪个元素及结果,对crash类的问题定位清晰;5. 各⼤云市场上⾃动遍历功能都多有限制企业⽆法⾃由定制.;6. 解决monkey等⼯具可控性差的缺点;7. 发现深层次的UI兼容性问题;8. 通过新⽼版本的diff可以发现每个版本的UI变动范围;四、设计理念appcrawler UI遍历基于app爬⾍思想,为了更好的认识app爬⾍,这⾥先介绍⼀下⽹络爬⾍,在了解⽹络爬⾍框架之后,您将会对app爬⾍有⼀个清晰的认知。

Android 用户界面---通知(Notifications)

Android 用户界面---通知(Notifications)

有几种类型的场景可能会要求你把应用程序中发生的事件通知给用户。

有些事件需要用户响应,而有些则不需要。

例如:1.当像文件保存完成的一个事件发生时,就应该显示一个短消息,提示用户保存成功了。

2.如果应用程序正在后台运行,并且需要用户的关注,那么应用程序就应该创建一个允许用户方便响应的通知。

3.如果应用程序正在执行用户必须等待的工作(如装载文件),那么应用程序就应该显示一个悬停的进度对话框。

每种通知任务都能够使用以下三种不同的技术来实现:1.广播通知,主要针对来自后台的短消息;2.状态栏通知,主要针对来自后台的并要求用户响应的持续性提醒;3.对话框通知,主要针对Activity相关的通知。

广播通知(Toast Notification)广播通知是弹出到窗口表明的一个消息(如图1所示)。

它仅填充了消息要求的空间大小,并且依然保留当前Activity的可先性和交互性。

这种类型的通知自动的渐入渐出,而且不接受交互事件。

因为广播通知是由后台服务创建的,即使应用程序不可见,它也会显示。

图1广播通知最好用短文本消息,如“文件保存成功”。

广播通知不能接收用户交互事件,如果希望能够的到用户的响应,可以考虑私用状态栏通知来替代。

状态栏通知(Status Bar Notification)状态栏通知会把一个图标(带有一个可选的提示文本消息)添加到系统的状态栏(如图2所示),并把一个展开的消息添加到通知窗口中。

当用户选择这个展开的消息时,Andriod 会触发一个由通知定义的Intent对象(通常是要启动一个Activity)。

你也能够在设备上给通知配置一个声音、震动、屏幕闪亮等效果以提醒用户。

图2当用户的应用程序正在一个后台服务中工作,并且需要把一个内部事件通知给用户时,这种类型的通知是非常合适的。

如果你需要把发生的事件通知给用户的同时,Activity不能保留焦点,可以考虑使用对话框通知来代替。

对话框通知(Dialog Notification)对话框通常是显示在当前Activity前面的一个小窗口。

移动端-Android客户端性能测试常见指标

移动端-Android客户端性能测试常见指标

移动端-Android客户端性能测试常见指标rom版本的性能测试⼀般关注功耗(不过 rom 版本的功耗测试跟应⽤的功耗测试会有所差异,当然只是⽤例设计⽅⾯的差异,⼯具仍然采⽤安捷伦电源仪进⾏)应⽤的性能测试包括很多测试项,如启动时间、内存、CPU、GPU、功耗、流量等。

对于启动时间、内存、cpu ⼀般都使⽤外部提供的第三⽅⼯具来辅助测试,如GT、安测试,这些⼯具的原理都是基于调⽤ android 底层的⼀些 api 来获取到测试所⽤到的值,当然我们也可以采⽤其他⽅法,如使⽤ android 本⾝提供的⼀套 adb 即可完成上述测试。

对于 GPU、功耗等测试来说,⽤第三⽅⼯具测试得到的数值⼀般都不是很准确,这个时候我们需要引⼊硬件来进⾏测试了,GPU 可以采⽤⾼速相机来进⾏测试,功耗可以使⽤万⽤表或安捷伦电源仪来进⾏测试(ps:有硬件动⼿能⼒的可以DIY⼀个⼩板进⾏)⼀、内存关于内存测试需要引⼊空闲状态、中等规格、满规格的概念。

1、空闲状态指打开应⽤后,点击home键让应⽤后台运⾏,此时应⽤处于的状态叫做空闲。

2、中等规格和满规格指的是对应⽤的操作时间的间隔长短不⼀,中等规格时间较长,满规格时间较短。

接下来我们说说在内存测试中,存在很多测试⼦项,如下清单所⽰1)空闲状态下的应⽤内存消耗情况2)中等规格状态下的应⽤内存消耗情况3)满规格状态下的应⽤内存消耗情况4)应⽤内存峰值情况5)应⽤内存泄露情况6)应⽤是否常驻内存7)压⼒测试后的内存使⽤情况3、如何使⽤adb查看内存信息1)查看所有内存信息命令:dumpsys meminfo例:C:\Users\yijiayi>adb shellshell@android:/ $ dumpsys meminfo2)查看某个包的内存信息命令:dumpsys meminfo pkg_name or pid注:pid可以通过 adb shell top | grep app_name 来查找例:C:\Users\yijiayi>adb shellshell@android:/ $ dumpsys meminfo com.tencent.mobileqq或shell@android:/ $ dumpsys meminfo 1034(注:1034是pid)重点关注如下⼏个字段:(1) Native/Dalvik 的 Heap 信息具体在上⾯的第⼀⾏和第⼆⾏,它分别给出的是JNI层和Java层的内存分配情况,如果发现这个值⼀直增长,则代表程序可能出现了内存泄漏。

基于Android的日程管理APP设计与实现

基于Android的日程管理APP设计与实现

一、需求分析
一、需求分析
在健康管理系统APP设计和实现过程中,首先需要对用户需求进行分析。通过 市场调研和分析,我们发现用户需要以下功能:
一、需求分析
1、身体指标监测:用户可以实时监测自己的体重、血压、血糖等身体指标; 2、健康数据分析:APP可以分析用户的健康数据,为其提供可视化的健康数 据分析结果;
1、易用性:日程管理APP应该易于使用,用户应该能够在短时间内掌握如何 创建、编辑、删除和查看他们的日程。
基本内容
2、灵活性:应用程序应该能够适应不同的日程需求,包括个人、团体和商业 日程。用户应该能够根据需要自定义日程的详细信息。
基本内容
3、提醒功能:为了确保用户不会错过任何重要的日程,应用程序应该具备强 大的提醒功能。例如,可以在日程开始前发送提醒通知。
1、用户表:存储用户信息,如用户名、密码、电子邮件等。
通过以上步骤,我们已经成功地设计和实现了一款基于Android的日程管理 APP。这款APP不仅满足了基本的功能需求,而且具有易用性、灵活性和可视化等 特点。尽管在实现过程中遇到了一些挑战,但通过合理的规划和精细的设计,我 们成功地克服了这些挑战。这款日程管理APP的成功实现标志着我们在移动应用 开发领域的又一重要突破。
基本内容
在架构设计阶段,我们需要确定应用程序的主要组成部分和它们之间的关系。 这主要包括以下几个部分:
基本内容
1、用户界面(UI):用户与应用程序交互的界面,应直观易用。 2、业务逻辑层:这一层处理所有与日程相关的操作,如创建、编辑、删除和 查看日程。
基本内容
3、数据访问层:这一层负责与数据库交互,包括读取和写入数据。 4、数据库:用于存储用户日程信息的数据库。我们选择SQLite作为本地数据 库,并使用Firebase进行云端数据同步。

adb命令测试安卓APP性能实例

adb命令测试安卓APP性能实例

安卓用户app性能测试一、响应软件的响应时间和响应速度直接影响到用户的体验度,如果一个软件,迟迟加载不出来,会直接影响到软件的日活、留存。

因此对于一个软件,对响应速度测试是必不可少的。

主要测试点:1、冷启动:首次启动app的时间间隔(只是启动时间,不包括页面加载)2、热启动:非首次启动app的时间间隔(只是启动时间,不包括页面加载)3、完全启动:从启动到首页完全加载出来的时间间隔4、有网启动:从发起跳转,到页面完全加载出来的时间间隔5、无网启动:从发起跳转,到页面完全加载出来的时间间隔(在项目中,主要测试关注点是冷启动,热启动)1.冷启动:首次启动app的时间间隔(只是启动时间,不包括页面加载)测试方法:adb shell am start -W packageName/ActivityName含义:ThisTime: 该Activity的启动耗时;TotalTime: 应用自身启动耗时, ThisTime+应用application等资源启动时间;WaitTime: 系统启动应用耗时, TotalTime+系统资源启动时间获取应用包名和Actively:手机点击app后在电脑cmd输入命令adb shell dumpsys activity recents | findstr “intent={” |findstr "cmp=用户APP测试结果:adb shell am start -W packageName/ActivityName2.热启动:按back按键后再启动adb命令用户APP测试结果:测试标准:冷启动时间不超过1.5s, 热启动不超过1s.二、内存在Android系统中,每个APP进程除了同其他进程共享内存(shared dirty)外,还独用私有内存(private dirty),通常我们使用PSS(私有内存+比例分配共享内存)来衡量一个APP的内存开销。

由于一个移动设备的内存是固定的,如果内存消耗过大就会造成应用卡顿或者闪退,需要对内存进行测试。

APP--Monkey压力测试

APP--Monkey压力测试

APP--Monkey压⼒测试adbadb是安卓调试桥是⼀种功能多样的命令⾏⼯具,可以与设备进⾏通话monkey压⼒测试原理:通过向系统发送伪随机的⽤户事件流(如按键输⼊、触摸屏输⼊、滑动Trackball、⼿势输⼊等操作),来对设备上的程序进⾏压⼒测试,检测程序多久的时间会发⽣异常。

⼀般在功能测试完成后进⾏Monkey测试⽤于发现App测试中的问题(如ANR(Application Not Responding),响应延时以及CRASH,⾮正常退出)Monkey还对测试中的系统进⾏监测,对下列三种情况进⾏特殊处理(⾃动停⽌):(1)如果限定了Monkey运⾏在⼀个或⼏个特定的包上,那么它会监测试图转到其它包的操作,并对其进⾏阻⽌;(2)如果应⽤程序崩溃或接收到任何失控异常,Monkey将停⽌并报错;(3)如果应⽤程序产⽣了应⽤程序不响应(application not responding)的错误,Monkey将会停⽌并报错;monkey命令常⽤的选项主要有四个,⼀个是-v 、-s、--throtlle、-p,-v的话⽤于详细显⽰命令执⾏过程 -p:获取包名(不指定,随机) -v:查⽇志 v越多越详细⼀般来说展⽰在cmd⾥⾯(也可以⽣成log报告来查看) -throttle:延时器相当于jmeter的思考时间,以毫秒为单位(mm) -s:指定mokey命令执⾏的序列号,主要作⽤就是处理复现问题seed:意思是把事件流做记录,来进⾏回归测试下次跑的时候加 -s seed当我们程序模拟100次随机⽤户事件事件的百分⽐(Event percentages):如果没有设置,就会随机分配调整触摸事件的百分⽐例如:adb shell monkey -p com.sf.DarkCalculator --pct-touch 10 -v 1000Event percentages(事件百分⽐):0:点击事件百分⽐,即参数--pct-touch1:滑动事件百分⽐,即参数--pct-motion2:缩放事件百分⽐,即参数--pct-pinchzoom3:轨迹球事件百分⽐,即参数--pct-trackball4:屏幕旋转事件百分⽐,即参数--pct-rotation5:基本导航事件百分⽐,即参数--pct-nav6:主要导航事件百分⽐,即参数--pct-majornav7:系统按键事件百分⽐,即参数--pct-syskeys8:Activity启动事件百分⽐,即参数--pct-appswitch9:键盘唤出隐藏事件百分⽐,即参数--pct-flip10:其他事件百分⽐,即参数--pct-anyeventmonkey的调式参数,⽐较常⽤的就是两个调式参数⼀个是:忽略异常退出(--ignore-crashes)、忽略响应延迟(--ignore-timeouts)monkey的参考命令adb shell monkey -p com.tencent.XXX(替换包名) --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes -v -v -v 1000000>d:\monkeyScreenLog.log例⼦:adb shell monkey -p com.android.browser --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes -v -v 100000>e:\monkeyScreenLog.log我们压测10万个⽹页请求可能会碰到⼀些问题例如 carsh(崩溃,⽹页⽆法打开) ANR(⽆响应,或者响应很慢)⼀般来说app响应的时间在⼀秒内可以通过上⼀版本来进⾏评估也可以参考同⾏来做竞品或者根据需求或者领导要求安卓启动时间测试什么是启动的时间:从点击应⽤的启动图标开始创建出⼀个新的进程直到我们看到了界⾯的第⼀帧,这段时间就是应⽤的启动时间。

Android如何完整的获取到用户已安装应用列表

Android如何完整的获取到用户已安装应用列表

Android如何完整的获取到用户已安装应用列表接到产品经理的预研需求,说希望获取用户已安装应用列表。

这个问题应该不难,只要是要把相关的知识点整理和验证一下。

对于获取用户已安装应用列表,我个人是很熟悉的,因为我的华为手机上,手机管家天天会在通知栏弹出”xxx应用尝试获取用户已安装应用列表被禁止”。

所以,很明显,跟权限是有关系的。

于是,我尝试去查找到底是manifest清单中的哪一个use-permission引起。

结果,找了很久,翻了很久,并没有哪个权限对已安装的应用列表负责。

但奇怪的是,我的手机上几乎全部的软件都声明了这个权限。

于是,尝试去求助其他组员,咨询了几个,不少人一脸懵逼的表示这是个什么玩意。

在他们的手机上压根就没有见过这个东西。

在写demo验证的过程中,发现非常简单的一个demo,居然也声明使用了该权限。

一开始怀疑,难道是检测到了相关代码自动申请了权限?发现全部注释后还是会声明。

后来,将清单文件中的唯一的访问Internet权限去掉,这样才正常。

所以,得出了一个结论就是,国内部分厂商比如华为、oppo,他们将”获取用户已安装应用列表”的权限暴露给了用户,让用户可以自由决定允许或者禁止应用访问该信息。

同时,这个权限类似于附加的默认权限,一旦app声明了任何权限,那么”获取用户已安装应用列表”的权限也会被附加进来。

但这个权限也不是太敏感,所以对于用户是无感知的。

这里的无感知指的是不会在应用中去主动让我们弹窗申请权限,手机管家弹出的通知不算。

好吧,说了这么多,看一下过程中的3种方案。

方案1private void getAppList() {PackageManager pm = getPackageManager();// Return a List of all packages that are installed on the device.List<PackageInfo> packages = pm.getInstalledPackages(0);for (PackageInfo packageInfo : packages) {// 判断系统/非系统应用if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) // 非系统应用{System.out.println("MainActivity.getAppList, packageInfo=" + packageInfo.packageName);} else {// 系统应用}}}此方法在华为、oppo手机上,把权限禁止后,就不能正确获取到已安装应用列表了。

Android通过adbshell命令查看内存,CPU,启动时间,电量等信息

Android通过adbshell命令查看内存,CPU,启动时间,电量等信息

Android通过adbshell命令查看内存,CPU,启动时间,电量等信息1、查看内存信息1)查看所有内存信息命令:dumpsys meminfo例:C:\Users\laiyu>adb shellshell@android:/ $ dumpsys meminfodumpsys meminfoApplications Memory Usage (kB):Uptime: 80066272 Realtime: 226459939Total PSS by process:90058 kB: com.tencent.mobileqq (pid 16731)57416 kB: system (pid 651)52052 kB: com.miui.home (pid 1121)…………(篇幅问题,略)Total PSS by OOM adjustment:223177 kB: Persistent57416 kB: system (pid 651)50036 kB: com.android.deskclock (pid 1096)…………252678 kB: Foreground90058 kB: com.tencent.mobileqq (pid 16731)…………50944 kB: Visible20318 kB: com.miui.miwallpaper (pid 974)…………90855 kB: Perceptible36448 kB: com.google.android.inputmethod.pinyin (pid 987)…………39654 kB: A Services23320 kB: com.tencent.android.qqdownloader (pid 14080)…………49659 kB: B Services20085 kB: com.tencent.mobileqq:qzone (pid 19646)…………148413 kB: Background21457 kB: com.miui.weather2 (pid 14296)…………3453 kB: com.miui.providers.datahub (pid 14651)Total PSS by category:454627 kB: Dalvik137206 kB: Unknown100835 kB: .so mmap62670 kB: .dex mmap54208 kB: Other dev30258 kB: Other mmap8527 kB: .apk mmap4752 kB: .ttf mmap2216 kB: Ashmem60 kB: Cursor21 kB: .jar mmap0 kB: NativeTotal PSS: 855380 kBKSM: 0 kB saved from shared 0 kB0 kB unshared; 0 kB volatile2)查看某个包的内存信息命令:dumpsys pkg_name例:shell@android:/ $ dumpsys meminfo com.tencent.mobileqq > /mnt/sdcard/meminfo.txt bileqq > /mnt/sdcard/meminfo.txt <</span>shell@android:/ $查看导出结果:具体输出项含义请搜索⽹络2、查看CPU信息windows系统:输⼊命令:top -m 10 -s cpu(-m显⽰最⼤数量,-s 按指定⾏排序),如下图所⽰:参数含义:PID : progress identification,应⽤程序IDS : 进程的状态,其中S表⽰休眠,R表⽰正在运⾏,Z表⽰僵死状态,N表⽰该进程优先值是负数#THR : 程序当前所⽤的线程数VSS : Virtual Set Size虚拟耗⽤内存(包含共享库占⽤的内存)RSS : Resident Set Size实际使⽤物理内存(包含共享库占⽤的内存)PCY : 前台(fg)和后台(bg)进程UID : User Identification,⽤户⾝份IDName : 应⽤程序名称注意第⼀列的pid,使⽤pid值可以查看当前程序的内存使⽤情况。

app性能测试

app性能测试

app性能测试⼀、android的app性能测试包括的测试项: 响应、内存、CPU、FPS、GPU、耗电、耗流量⼆、响应 1. 响应主要测试点: 1. 启动:⾸次启动app的时间间隔(只是启动时间,不包括页⾯加载) 2. 热启动:⾮⾸次启动 app的时间间隔(只是启动时间,不包括页⾯加载) 3. 完全启动:从启动到⾸页完全加载出来的时间间隔 4. 有⽹启动:从发起跳转,到页⾯完全加载出来的时间间隔 5. ⽆⽹启动:从发起跳转,到页⾯完全加载出来的时间间隔(在项⽬中,主要测试关注点是冷启动,热启动) 2. 测试⽅法: 1. 使⽤adb命令 1. 冷启动 adb shell am start -W packageName/ActivityName(绝对路径,⾸个 Activity) ThisTime:该Activity的启动耗时;TotalTime:应⽤⾃⾝启动耗时, ThisTime+应⽤application等资源启动时间;WaitTime:系统启动应⽤耗时,TotalTime+系统资源启动时间 2. 热启动:按back按键后再启动adb命令 测试标准:冷启动时间不超过1.5s, 热启动不超过1s 3. 完全启动,⽆⽹启动,有⽹启动都可以通过fiddler抓包来获取启动的时间,通过设置⽹速和抓包,可以获取启动时间,但是有⼀定的误差。

在项⽬中,⼀般只需要测试冷启动,热启动便可三、内存 测试点: 1. 空闲状态:切换⾄后台或者启动后不做任何操作,消耗内存最少。

2. 中强度状态:时间偏长的操作应⽤。

3. ⾼强度状态:⾼强度使⽤应⽤,可以跑monkey来测试(通常⽤来测试内存泄漏)。

内存泄漏:指应⽤⾥的内存⼀直没有释放,内存⼀直增加 ,系统内存⼀直减少 测试⽅法: 1. 使⽤adb命令: adb shell dumpsys meminfo packageName 获取应⽤包名和Actively: adb shell dumpsys window | findstr mCurrentFocus 测试关注点: 1. Native heap alloc:JIN的内存分配 2. Dalvik heap alloc:Java层的内存分配 3. PSS 关注点: 1. 退出某个页⾯后,内存是否有回落。

app性能指标

app性能指标

app性能指标1.app性能指标1、响应(启动时间)2、内存3、cpu4、FPS (app使⽤的流畅度)5、GPU过度渲染6、耗电7、耗流(app除了这些性能测试,还有:⼿机版本号兼容性,屏幕分辨率兼容性,稳定性测试,安全测试等, )启动时间测试内容冷启动速度热启动速度完全启动速度有⽹启动速度⽆⽹启动速度内存在Android系统中,每个APP进程除了同其他进程共享内存(shared dirty)外,还独⽤私有内存(private dirty),通常我们使⽤PSS(私有内存+⽐例分配共享内存)来衡量⼀个APP的内存开销测试点空闲状态:切换⾄后台或者启动后不做任何操作,消耗内存最少中强度状态:时间偏长的操作应⽤强度状态:⾼强度使⽤应⽤,可以跑monkey来测试(通常⽤来测内存泄漏)内存泄漏:指应⽤⾥的内存⼀直没有释放,内存⼀直增加,系统内存⼀直减少关注点退出某个页⾯后,内存是否有回落进⾏某个操作后,内存是否增长过快旧版本和新版本⽐较新版本和竞品⽐较测试⽅法⽅法1:使⽤adb命令adb shell dumpsys meminfo packageName获取当前活动的包名和actively(adb shell dumpsys window | findstr mCurrentFocus)(mCurrentFocus—当前焦点)关注参数native heap alloc(JNI层的内存分配)dalvik heap alloc (java层的内存分配)pss:应⽤真正占据的内存⼤⼩注意:如果前两个值⼀直增长,应⽤程序可能出现了内存泄漏⽅法2:使⽤性能测试⼯具emmageeEmmagee是⽹易开发的⼀款测安卓应⽤性能的测试apk使⽤⽅法安装到emmagee到⼿机上,启动选择需要测试性能的应⽤启动被测应⽤界⾯会展⽰内存、cpu、电流、流量等数据stop test后,本地sd卡中会保存⼀份性能测试数据((保存地址:/sdcard/Emmagee/******* .csv⽂件))可以通过excel将数据转化为图表,更直观的查看各性能指标的数据⽅法3:使⽤AndroidStudio ⾃带 CPU 和内存检测功能 – Android Monitor⽅法4:内存检测⼯具 DDMS -->HeapCPU主要关注的是cpu的占⽤率测试点在空闲时间(切换⾄后台)的消耗,基本没⼤应⽤使⽤cpu在运⾏⼀些应⽤的情况下,cpu已占50%的情况下,观察应⽤程序占⽤cpu的情况在⾼负荷的情况下看cpu的表现(cpu应该是在80%以上)关注点和⾃⾝app的上个版本对⽐和竞品对⽐⾃⾝app各个activity对⽐测试⽅法⽅法1:使⽤adbadb shell top -m cpu |grep packageName(查看某个软件的cpu占⽤率)adb shell top -m 10 -s cpu (查看cpu占⽤前10的应⽤)top cpu 参数:-m 显⽰最⼤数-s 按指定⾏排序-t 显⽰进程名称-n 在退出前刷新⼏次-d 刷新间隔adb shell dumpsys cpuinfo |grep 包名(⼀段时间的平均值)⽅法2:使⽤第三⽅⼯具Emmagee、GT等⽅法3:使⽤androidstudio⾃带的检测⼯具android monitorFPS(应⽤的使⽤流畅度)fps是指画⾯每秒传输的帧数,每秒钟帧数越多,所显⽰的动作就会越流畅,⼀般来说安卓设备的屏幕刷新率为60帧/秒,要保持画⾯流畅不卡顿,要求每⼀帧的时间不超过1000/60=16.6ms,否则就会出现跳帧、画⾯卡顿关注点⾼于16ms的帧率(即卡顿率)测试⽅法⽅法1:adb命令打开⼿机:开发者选项->GPU呈现模式分析->在adb shell dumpsys gfxinfo操作要测试的app在cmd窗⼝输⼊adb shell dumpsys gfxinfo 包名得到⼀个矩阵数据,计算矩阵中帧率⼤于16的点所占⽐例,即为卡顿⽐Draw: 表⽰在Java中创建显⽰列表部分中,OnDraw()⽅法占⽤的时间。

android:shell命令

android:shell命令

android:shell命令adb是Android重要⼯具之⼀,以提供强⼤的特性,例如复制⽂件到设备或从设备复制⽂件。

可以使⽤Android Shell命令⾏参数连接到⼿机本⾝,并发送基本的 shell 命令。

进⼊命令⾏,使⽤1. adb shell进⼊到Android Shell命令模式,注意,这时候模拟器或者⼿机要启⽤并且正确接通在这个Android Shell命令环境中,可以:显⽰⽹络配置,⽹络配置可显⽰多个⽹络连接。

注意这多个⽹络连接:lo 是本地或 loopback 连接。

tiwlan0 是 WiFi 连接,该连接由本地 DHCP 服务器提供⼀个地址。

显⽰ PATH 环境变量的内容。

执⾏ su 命令,以成为超级⽤户。

将⽬录改为 /data/app,其中存放⽤户应⽤程序。

列出包含某个应⽤程序的⽬录。

Android 应⽤程序⽂件实际上是归档⽂件,可通过 WinZip 之类的软件查看。

扩展名为 apk。

发出 ping 命令,查看 是否可⽤。

从相同的命令提⽰符环境中,还可以与 SQLite 数据库交互,启动程序以及执⾏许多其他系统级任务。

想像⼀下您正在连接到电话,因此这是⾮常了不起的功能。

⼀、adb命令1. Java代码2. adb get-product // 获取设备的ID3. adb get-serialno // 获取设备的序列号4. adb devices // 得当前运⾏的模拟器/设备的实例的列表及每个实例的状态5. adb bugreport // 查看bug报告⼆、Android Shell命令通过adb shell命令进⼊shell后,执⾏下列命令。

1、访问数据库:1. sqlite32、记录⽆线通讯⽇志:⼀般来说,⽆线通讯的⽇志⾮常多,在运⾏时没必要去记录,但我们还是可以通过命令,设置记录:1. logcat -b radio3、删除应⽤:Android没有提供⼀个卸载应⽤的命令,需要⾃⼰⼿动删除:1. cd /data/app2. m appName.apk注:[appName]为应⽤的名称;三、可以在Android Shell命令下使⽤的⼀些linux命令命令:1. ls // 查看⽬录2. date // 打印或设置当前系统时间3. cat /proc/meminfo // 查看内存信息4. cat /proc/cpuinfo // 查看CPU信息Android Shell命令的相关内容就为⼤家介绍到这⾥。

Android BOOK

Android BOOK

Android开放式手开发平台Tango、Nuvola、OpenclipArt等网站提供许多免费的图标可供下载。

/p/androidbmi/source/browse//1、Android开发工具:Dalvik调试监控服务工具、Android资源打包工具、Android调试工具、SQLite数据库、Traceview工具、mksdcard卡、dx工具、activityCreator工具2、Android环境搭建:下载并安装JRE、下载并安装Eclipse 集成开发环境、下载Android SDK、下载和安装Apache Ant压缩包、为Eclipse安装Android开发插件3、Android应用程序没有唯一的启动入口,一个Android应用程序是由多个不同的组件组合而成,组件之间通过Intent来实现通信。

所有的组件都必须在Android-Manifest.xml文件中声明。

它用于定义应用程序中需要的组件、外部库以及运行时需要的各类权限。

4、Activity简介:Activity是应用程序的表示层。

应用程序中的每个屏幕显示都通过继承和扩展类Activity来实现。

Activity利用View来实现应用程序的GUI,而我们的手机用户则直接通过GUI和应用程序做交互,如应用程序通过GUI向用户显示信息,用户通过GUI向应用程序发出指令和响应。

5、Service简介:与Activity相反,Service没有可见的用户界面,但Service的特点是能长时间在后台运行。

6、BroadcastReceiver简介:BroadcastReceiver用户接受广播通知的组件。

BroadcastReceiver自身并不实现图形用户界面,但是当它收到某个通知消息后,BroadcastReceiver可以启动 Activity作为响应,或者通过NotificationManager 提醒用户。

7、ContentProvider简介:ContentProvider能将应用程序特定的数据提供给另一个应用程序使用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Am.java部分代码如下:
public class Am extends BaseCommand {
/360qtest/2014/03/19/android%E8%8E%B7%E5%8F%96app%E5%90%AF%E5%8A%A8%E6%97%B6%E9%97%B4/
public abstract interface IActivityManager {
public static class WaitResult implements Parcelable { public int result; public boolean timeout; public ComponentName who; public long thisTime; public long totalTime;
public static IActivityManager getDefault() { return null;
} }
package android.app;
import ponentName; import android.os.Parcel; import android.os.Parcelable;
到这一步之后,我们需要做的工作就是如何在自己的App中调用这个startActivityAndWait方法。
不过很明显这个API是不对开发者开放的,Android系统中有很多隐藏API,Google之所以要将一些API隐藏(指加上 @hide标记的public类、方法或常量)是因为Android系统本身还在不断的进化发展中。从1.0、1.1到现在4.4,这些隐 藏的API本身可能是不稳定的(方法的参数数量,类型都会变化),所以使用隐藏API,意味着程序更差的兼容性。
}; }
分别查阅4.0、4.4的源码之后发现startActivityAndWait的参数个数和顺序居然不一样,那通过API欺骗的方式适配所 有的系统版本看来是不现实了。但是我们可以结合Java的反射和API欺骗来完成这个工作。所以改写后的代码如下:
package android.app;
public abstract class ActivityManagerNative {
但这并不意味着我们就不能使用它,这些隐藏的API在系统中都是真实存在的,只是不对外开放而已。我们可以通过 三种方法调用它,分别是:JAVA反射机制、API欺骗、重新编译Android源码。
反射是Java的语言特性之一,在此不进行赘述,需要介绍一下API欺骗:烧制到手机中的android.jar包含了Android所 需的各种类与方法;而供开发者使用的android.jar只是其中的一部分。API欺骗是指在应用中去模拟未公开的类和方法 让应用编译通过并生成APK,然而在应用实际运行中调用的却仍是烧制到手机中真实的android.jar。
到了这里我们基本完成了一半的工作,但是每次都需要在adb中才能查看启动时间无疑是很麻烦的,那么如何在手机 上通过一个App控制其他App的启动,并获取启动时间呢,咱们继续看。
首先通过shell看一下am命令中包含什么,在System/bin目录下面找到“am”命令,并打印出之后是如下的结果
可以看出他跟普通的shell命令不一样,他是通过调用一个/framework/目录下的一个am.jar完成的工作,并最终执行 mands.am包下面的Am.java。那我们接下来要做的工作就是下载Android源码,并找到这个 Am.java。
public static IActivityManager getDefault() {
/360qtest/2014/03/19/android%E8%8E%B7%E5%8F%96app%E5%90%AF%E5%8A%A8%E6%97%B6%E9%97%B4/
for (int i = 0; i < methods.length; i++) { String methodName = methods[i].getName(); if (methodName.contains("startActivityAndWait")) { startActivityMethod = methods[i]; startActivityMethod.setAccessible(true); break; }
} }
看到代码之后突然就有了一种豁然开朗的感觉,没错,就是main函数!他就是整个am命令的入口,并调用onRun方 法。如果我们输入的参数是“start”的话,会调用runStart()方法。在runStart()方法之前的预处理中,根据我们输入的-W 参数,将mWaitOption赋值为true。然后最终就找到了整个命令的精髓所在–startActivityAndWait()!
}; }
然后在使用时,首先通过API欺骗获取到一个IActivityManager的实例,然后通过Java反射找到startActivityAndWait方 法,根据不同的系统版本,传递不同的参数,最终完成工作,代码如下:
/360qtest/2014/03/19/android%E8%8E%B7%E5%8F%96app%E5%90%AF%E5%8A%A8%E6%97%B6%E9%97%B4/
private long startActivityForResult(Object[] objects) { try { Object object = startActivityMethod.invoke(activityManager, objects); WaitResult waitResult = (WaitResult) object; return waitResult.thisTime; } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } return -1;
1/4
2014/11/25
Android下如何获取App启动时间 | Qtest技术空间–服务端测试,android,ios无线测试,智能硬件测试
private IActivityManager mAm; ...
public static void main(String[] args) { (new Am()).run(args);
3/4
2014/11/25
Android下如何获取App启动时间 | Qtest技术空间–服务端测试,android,ios无线测试,智能硬件测试
private void getStartActivityMethod() { activityManager = ActivityManagerNative.getDefault(); Method[] methods = activityManager.getClass().getDeclaredMethods();
} }
// 4.4 private long startActivityWithFieldsForApi19(Intent intent) {
Object[] objects = new Object[] { null, null, intent, null, null, null, 0, 0, nul return startActivityForResult(objects); }
通过查看源码我们可以看到需要模拟的是ActivityManagerNative、IActivityManager和他的startActivityAndWait方法。 参照源码,实现以下代码:
package android.app; public abstract class ActivityManagerNative {
}
...
@Override public void onRun() throws Exception {
if (op.equals("start")) { runStart();
} ... }
private void runStart() throws Exception { ... IActivityManager.WaitResult result = null; int res; if (mWaitOption) { result = mAm.startActivityAndWait(null, null, intent, mimeType, null, null, 0, mStartFlags, mProfileFile, fd, null, mUserId); res = result.result; } else { res = mAm.startActivityAsUser(null, null, intent, mimeType, null, null, 0, mStartFlags, mProfileFile, fd, null, mUserId); } ...
2/4
2014/11/25
Android下如何获取App启动时间 | Qtest技术空间–服务端测试,android,ios无线测试,智能硬件测试 return null;
} }
package android.app;
import ponentName; import android.os.Parcel; import android.os.Parcelable;
相关文档
最新文档