当前位置:   article > 正文

Android系统稳定性及性能_系统性能和稳定性

系统性能和稳定性

官网

单元测试https://developer.android.google.cn/training/testing
性能优化:https://developer.android.google.cn/topic/performance

重点章节

1.developer.android

Android Studio->USER GUIDE

1.1 Test your app
概述

Mockito:test Android API calls in local unit
Espresso or UI Automator:exercise user interaction in your instrumented tests
Espresso tests:generate automatically using Espresso Test Recorder

Write test:https://developer.android.com/training/testing
App performance:https://developer.android.com/topic/performance

测试类型
  • Local unit test
    位置在module-name/src/test/java/,基于junit架构实现单元测试。
    在本地PC上使用java虚拟机测试。测试不依赖Android framework的测试项或者测试可以模拟Android framework部分的测试项。运行时 测试项以来一个已经被需改了的android.jar,该库中脱去了所有的final修饰,方便测试项实现时使用一些如,如Mockito模拟对象。
  • Instrumented tests
    位置在module-name/src/androidTest/java/,基于Android自身的单元测试架构,如AndroidTest。
    测试运行在物理设备或模拟器上。用例实现使用Instrumentation API,获取app的信息,如context,让app在单元测试控制之下。在App做整合和UI测试时,可以实现自动化交互测试,以及测试无法模拟对象进行测试的部分。
    AndroidStudio支持为单个module创建单独的测试模块,和其他测试分开。重点的核心单元测试,可以这么做,方便长期维护和更新,确保核心代码持续的迭代和稳定。详见https://developer.android.com/studio/test#create_instrumented_test_for_a_build_variant的“Use separate test modules for instrumented tests”。
添加测试

为APP添加一个新的单元测试,详见
https://developer.android.com/studio/test#create_instrumented_test_for_a_build_variant

Espresso Test Recorder

是一个工具,用于创建UI test,不需要写任何测试代码。通过记录一个场景的交互过程,工具会保存记录过程和自动生成相应的UI测试。运行Espresso test可以在本地,也可以和Firebase结合。
详细资料:https://developer.android.com/studio/test/espresso-test-recorder

Monkey

压力测试工具,命令行工具,在设备或模拟器上运行。运行过程中产生伪随机的用户事件流。不需要写任何测试用例,常用于压力测试开发中的软件。
详见:https://developer.android.com/studio/test/monkey

Monkeyrunner

monkeyrunner工具提供在代码之外控制设备或模拟器的API。结合monkeyrunner,可以实现一个python程序,用于安装app或测试一个包,运行该程序,对app的包发送按键、截图并保存等。monkeyrunner被设计主要用于测试app的functional/framework层级或者用于运行单元测试,当然也可以用其他目的。
monkeyrunner和monkey无关。Monkey通过adb在设备或模拟器中运行,monkeyrunner在工作站中运行,使用API发送一系列命令给设备或模拟器。monkeyrunner为Android测试提供了一些独特的特点:

  • 控制多个设备。
    monkeyrunner可以运行多个测试套件在多个设备或模拟器之间。启动多个设备或模拟器,连接这些设备或模拟器,然后运行一个或多个测试。
  • 功能性测试。
    monkeyrunner可以运行一个自动测试,从开始到结束,通过按键输入输入值或触摸事件,通过截图查看测试结果。
  • 回归测试。
    monkeyrunner 用于测试app的稳定性,通过对比测试的截图和正确的运行结果的截图。
  • 可扩展自动化。
    由于monkeyrunner 是一个API工具包,可以用于开发基于python的模块或完整系统程序控制Android设备。除了使用monkeyrunner 自身的API,也可以使用标准的python包:os和subprocess,来调用Android工具,如adb。可以添加自己的类到monkeyrunner API,详见:Extending monkeyrunner with plugins

monkeyrunner工具使用使用python实现的工具Jython。Jython使monkeyrunner API很容和Android framework交互,使用Jython,可以使用python语法访问常量、类、方法。

1.2 Profile your app
概述

如果app响应慢、动画显示快慢不一、冻屏、崩溃或者消耗很多电源,都是低性能的表现。为了避免这些性能问题,使用统计分析等工具识别app哪里低效的使用了资源,如CPU、内存、绘图、网络等。
注意:为了统计分析app,应该关掉动态安装app功能。使用动态安装app在一定程度上会影响性能。
官方工具汇总:https://developer.android.com/studio/profile

Hierarchy Viewer

Android Device Monitor中的一个工具,统计UI layout的层级,若层级太深,UI显示需要加载更多资源,如果app响应慢,就要分析layout的层级是否合理。该工具目前不在被推荐使用,在AndroidStudio中使用 Layout Inspector。Layout Inspect运行时分析UI和验证UI,尤其是运行时构建布局且layout的行为不是期待的时候很有用。Layout Validation允许同时在不同尺寸的设备上预览布局,包括字体大小、不同的语言,很方便的测试很多通常的部分问题。
操作指南:https://developer.android.com/studio/profile/hierarchy-viewer?hl=en

Android Profiler

Android Profiler在AndroidStudio 3.0+替代Android Monitor tools。Androd Profiler提供CPU、内存、网络、电源使用的实时数据。
操作指南:https://developer.android.com/studio/profile/android-profiler

CPU Profiler

优化CPU使用率有很多好处,比如带来快速的、顺滑的用户体验和保护设备电池的生命周期。使用CPU Profiler在与应用程序交互时实时检查应用程序的CPU使用情况和线程活动,或者可以检查记录的方法跟踪、函数跟踪和系统跟踪中的详细信息。CPU profile显示的信息类型由对工具的配置决定:

  • System Trace:捕获细粒度的细节,允许您检查应用程序如何与系统资源交互
  • Method and function traces: 对于app进程中的每一个线程,可以找出哪一个方法或者功能被执行了很长一段时间以及CPU资源使用情况。可以看到函数调用和被调用过程。利用信息,分析出哪一个方法或者功能频繁的调用特殊的需要很多资源的任务,优化代码避免不必要的工作。在记录方法调用信息时,可以选择sampled(采样)或instrumented(导航)方式。当记录功能运行轨迹时,只能使用sampled方式。

操作指南:https://developer.android.com/studio/profile/cpu-profiler
实践总结:使用trace分析app一个功能的调用过程

  1. 使用profiling CPU,抓取指定进程的trace
  2. 导出trace文件,使用notepad++打开
  3. 查找对应应用的包名
Memory Profiler

Android Profiler的一个组件,帮助识别内存泄漏和内存抖动,内存抖动会导致卡顿、冻屏甚至app崩溃。显示app实时使用内存情况的图形,帮助抓取堆栈信息、强制内存回收、跟踪内存分配。分析内存也可以使用dumpsys meminfo命令;也可以分析log中GC时间,详见https://developer.android.com/studio/debug/am-logcat#memory-logs

操作指南:https://developer.android.com/studio/profile/memory-profiler

Android提供一个内存环境管理,决定app哪些对象不在需要使用,垃圾回收器释放并回收不再使用的内存到堆栈。Android不断的优化着发现不再使用的内存的方法,在当前的所有Android版本,内存回收都会导致运行的程序短暂的暂停,多数时候这种暂停是不可察觉的。但是,如果app申请内存的速度大于系统回收的速度,app可能会暂停更长时间以释放足够的内存,这会导致app丢帧和可见的延迟(表象为卡顿)。

即使app不存在明显的卡顿,如果内存泄漏,当app在后台运行,依然持有一些内存。这会导致系统强制执行回收不必要内存事件,来减缓了系统的剩余内存性能。最后,系统强制杀掉应用,回收内存,如此会导致,当app重新回到前台时需要完全启动(需要更长的事件和更多的资源)。

为了阻止这些问题的出现,应该使用Memory Profiler,按照如下方式:

  • 在时间线中寻找可能导致性能问题的不受欢迎的内存分配模式
  • Dump java堆栈信息,以查看哪些对象在任何给定时间使用内存不足。 在较长的时间内,几次dump java堆栈信息,可以帮助识别内存泄漏
  • 在正常和极端用户交互期间记录内存分配,以准确地识别代码在短时间内分配太多对象或分配被泄漏的对象的位置。

操作指南:https://developer.android.com/studio/profile/memory-profiler
更多关于内存管理:https://developer.android.com/topic/performance/memory

Network Profiler和Energy Profiler

Network Profiler:https://developer.android.com/studio/profile/network-profiler
Energy Profiler:https://developer.android.com/studio/profile/energy-profiler

1.3Command line tools
Dmtracedump

一个从跟踪日志文件生成图形调用堆栈图的工具。该工具使用Graphviz Dot工具创建图形输出,因此在运行dmtracedump之前需要安装Graphviz。
App运行时,要生成一个方法的跟踪日志,可以使用Debug类,这种方法可以准确的获取设备开始和结束记录之间的跟踪信息,可以保存跟踪日志到指定的位置,可以很容易识别出每一个log。可以使用CPU Profiler查看跟踪日志。在开始生成跟踪日志之前,需要确定在代码中添加了保存跟踪日志到指定目录的逻辑。在代码中添加生成跟踪日志的开始和结束点,详见:https://developer.android.com/studio/profile/generate-trace-logs
也可以使用CPU Profiler获取跟踪日志,不需要在代码中添加明确的开始和结束逻辑。
dmtracedump工具将调用堆栈数据生成树图,其中每个节点表示方法调用。 它使用箭头显示调用流(从父节点到子节点。 下图显示了dmtracedump的示例输出。
使用指南:https://developer.android.com/studio/command-line/dmtracedump

Systrace

systrace命令调用Systrace tool,在系统层面收集和检测设备中所有进程的时序信息。该工具很强大,可以辅助分析系统性能以及分析解决一些疑难杂症。
使用指南:https://developer.android.com/topic/performance/tracing

Perfetto

通过Android调试桥(ADB)从Android设备收集性能信息的工具。Perfetto使用各种来源从设备中收集性能跟踪,例如下面

  • ftrace kernel的信息
  • atrace 用户空间service和app的注释
  • heapprofd 服务和应用程序的native内存使用信息

使用指南:https://developer.android.com/studio/command-line/perfetto

dumpsys

在android设备上运行并提供系统服务信息的工具,可以通过adb在命令行使用dumpsys,从运行中的设备获取有诊断信息的输出。输出信息比想象的要详细,使用命令时使用适当的选项获取感兴趣的信息。使用该命令可以完成通用任务的诊断,如input、RAM、电源、网络。
使用指南:https://developer.android.com/studio/command-line/dumpsys

1.4 Best practices of performance

Locate:Docs->GUIDES->Best practices:Performance
性能优化汇总:https://developer.android.com/topic/performance
使用app实现一个很cool的想法,是一件令人愉快的事情。这只是开始,接下来是要对app性能最大化。例如:

  • 使用很少的电源
  • 启动快速
  • 应用交互响应快速

这部分提供了需要的诀窍,以使应用程序不仅cool,而且有很好的性能。
重点方面:

  • Android重点要素(vitals)。这部分平时获取到该概念较少,后面详细说明
  • Processes and threads overview。合理使用进程和线程
  • Better performance through threading。电源使用相关
  • Optimize for battery life。电源相关
  • Reduce your app size。顾名思义,减小应用大小,若apk本身很大,减小大小意义还是比较大的
  • Manage your app’s memory
  • Design for seamlessness。app中交互不同场景下的无缝对接
  • Keeping your app responsive。相反的,就会出现ANR
  • SMP primer for Android。入门级编写利于多处理器运行的程序,支持语言C/C++/JAVA
  • Verifying app behavior on the Android runtime (ART)。介绍ART特性,识别系统和app在ART上的一些行为,方便对app和系统的性能优化。
Android重点要素(vitals)

官网:https://developer.android.com/topic/performance/vitals
在这里插入图片描述

2.Source.android

Design->TESTS

概述

Android提供了很多测试套件,如VTS、CTS、SST等。在标准化情况下,一定程度上能确保系统的稳定性和扩展性。多媒体盛行的现在,多媒体测试显得尤为重要,video and codelab tutorials
使用git hooks协助运行test,例如在提交前。该方案的实现基于完成的持续集成系统。

详细内容详见:https://source.android.google.cn/compatibility/tests
梳理总结资料,详见“Android test and performance”。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/203970?site
推荐阅读
相关标签
  

闽ICP备14008679号