`
Lamking
  • 浏览: 2253 次
社区版块
存档分类
最新评论

Android性能测试之卡顿ANR测试

 
阅读更多

 

 

 

一直以来Android性能测试一直是android测试中一个被一部分人遗忘,有被一部分人无可奈何的东西。在绝大部分的创业公司,性能测试基本上都是被遗忘的,因为功能测试和稳定性测试才是重点,而在中等公司中一部分测试人员向对Android进行性能测试,却无从下手。Android性能测试一直存在测试维度少,测试数据难收集,已收集数据难量化的特点,这些特点又是因为Android手机版本碎片化、硬件多样化、App功能复杂造成的。

 

性能测试总的来说,可以分为卡顿ANR测试、流畅度测试、电量测试、流量测试。一个APP为什么需要性能测试,总的来说就是一些不严谨的代码,在低端机型造成卡顿,对手机上有限电量的浪费,昂贵流量的浪费,造成用户流失。

 

今天先说说卡顿ANR测试

 

卡顿ANRAndroid就是天生的朋友,从Android第一天诞生直到现在的8CPUAndroid还是未能摆脱页面不流畅,卡,死机的诟病,所以个人认为卡顿ANR测试是性能测试最主要的一块。

 

卡顿简单的来说,就是手机没有及时响应、页面延迟,出现丢帧的现象,或者点击无响应。绝大多数的卡顿,稍等片刻系统就会恢复正常,但假如超过5S,就可能会引发手机ANR,造成更高级别的警告。

 

什么会引发ANR

 

Android里,应用程序的响应性是由Activity ManagerWindowManager系统服务监视的 。当它监测到以下情况中的一个时,Android就会针对特定的应用程序显示ANR

ANR一般有三种类型:

 

1KeyDispatchTimeout(5 seconds) --主要类型按键或触摸事件在特定时间内无响应

2BroadcastTimeout(10 seconds) --BroadcastReceiver在特定时间内无法处理完成

3ServiceTimeout(20 seconds) --小概率类型 Service在特定的时间内无法处理完成

 

这三种原因都会造成ANR,但是第一种情况基本上占了所有ANR的百分之九十以上,第三种的情况微乎其微。这三种ANR不是孤立的,有可能会相互影响。例如一个应用程序进程中同时有一个正在显示的Activity和一个正在处理消息的BroadcastReceiver,它们都运行在这个进程的主线程中。如果BRonReceive函数没有返回,此时用户点击屏幕,而onReceive超过5秒仍然没有返回,主线程无法处理用户输入事件,就会引起第1ANR。如果继续超过10秒没有返回,又会引起第2ANR。发生ANR的主要原因是潜在的耗时操作,例如网络或数据库操作,或者高耗时的计算如改变位图尺寸,应该在子线程里(或者以数据库操作为例,通过异步请求的方式)来完成。然而,不是说你的主线程阻塞在那里等待子线程的完成——也不是调用 Thread.wait()或是Thread.sleep()。替代的方法是,主线程应该为子线程提供一个Handler,以便完成时能够提交给主线程。以这种方式设计你的应用程序,将能保证你的主线程保持对输入的响应性并能避免由于5秒输入事件的超时引发的ANR对话框。

 

三种ANR发生时都会在log中输出错误信息,你会发现各个应用进程和系统进程的函数堆栈信息都输出到了一个/data/anr/traces.txt的文件中,ROOT手机导出该文件后,分析此日志可以得出一些结论,但traces文件信息比较抽象,难理解。总的来说,日志难收集,结果难分析。

 

如何避免ANR

 

1 运行在主线程里的任何方法都尽可能少做事情。特别是,Activity应该在它的关键生命周期方法(如onCreate()onResume())里尽可能少的去做创建操作。(可以采用重新开启子线程的方式,然后使用Handler+Message的方式做一些操作,比如更新主线程中的ui等)

 

2 应用程序应该避免在BroadcastReceiver里做耗时的操作或计算。但不再是在子线程里做这些任务(因为 BroadcastReceiver的生命周期短),替代的是,如果响应Intent广播需要执行一个耗时的动作的话,应用程序应该启动一个 Service。(此处需要注意的是可以在广播接受者中启动Service,但是却不可以在Service中启动broadcasereciver,关于原因后续会有介绍,此处不是本文重点)

 

3)避免在Intent Receiver里启动一个Activity,因为它会创建一个新的画面,并从当前用户正在运行的程序上抢夺焦点。如果你的应用程序在响应Intent广 播时需要向用户展示什么,你应该使用Notification Manager来实现。

 

TestBird

分享到:
评论

相关推荐

    BlockCanary:Android主线程卡顿检测

    BlockCanary是一款针对Android平台的轻量级主线程卡顿检测框架,主要目的是帮助开发者发现并定位App在运行过程中可能出现的UI线程阻塞问题。它通过监听主线程的执行情况,当检测到主线程执行时间超过设定阈值时,会...

    Android应用源码之测试反应能力源码.zip

    这份"Android应用源码之测试反应能力源码.zip"压缩包很可能是为了帮助开发者理解和优化Android应用性能,尤其是用户交互部分。下面将详细介绍相关知识点。 1. **Android应用的基本结构**: Android应用主要由...

    Android客户端性能分析

    - **稳定性**:持续48小时的Monkey测试不应出现闪退或ANR等问题。 - **耗电**:应用后台运行时不应异常耗电。 为了分析和定位性能问题,可以使用多种工具和技术: - **Profiler工具**:如Android Profiler,用于...

    android资料

    其次,书中会深入讨论Android的进程和线程管理,这是理解Android性能优化的关键。读者将学习到如何合理调度进程,优化内存使用,以及如何避免应用出现卡顿和ANR问题。此外,还会涉及Android的多任务处理,包括任务栈...

    Android开发应用实战详解

    11. **Android性能优化**:包括内存优化、UI流畅度优化、电量优化等,是提升应用质量的关键。了解内存泄漏检测、CPU使用率监控和ANR分析等工具,有助于打造高性能应用。 12. **单元测试和自动化测试**:JUnit和...

    autoMonkey框架源代码

    当前移动互联网已经过了草创时期,各家公司都在抢占市场和用户;那么,就看哪一家做的更精致(交互做的更好,崩溃出现的更少)。...APP测试涉及各个方面,而稳定性和性能测试一般在功能测试完成后开展。

    monkey问题稳定性总结

    4. **问题分类**:在Monkey测试中,可能遇到的问题包括但不限于应用崩溃、ANR(Application Not Responding)、内存泄漏、UI卡顿、资源泄露等。 5. **问题分析与解决**:对于遇到的问题,需要使用日志分析工具,如...

    Android应用框架原理与程序设计.rar

    10. **异步编程与线程管理**:由于Android主线程(UI线程)不允许执行耗时操作,因此开发者需要了解异步编程,如AsyncTask、Handler、Looper、ThreadPoolExecutor等,来处理后台任务,防止应用出现卡顿或ANR错误。...

    Android强行结束APP进程的方法.zip

    然而,有时开发者或者用户可能需要强制结束一个APP进程,例如进行性能测试、解决卡顿问题或者优化内存使用。本文将详细探讨在Android中如何实现这一目标,主要基于提供的源码分析。 首先,我们需要理解Android应用...

    Android 图片异步加载 加载网络图片

    在Android系统中,如果在主线程(UI线程)执行耗时操作,如加载大图,会导致应用卡顿甚至ANR(Application Not Responding)错误。因此,图片加载应当在后台线程进行,加载完成后再更新到UI上,确保界面流畅。 ...

    android monkey指令

    在Android开发与测试领域中,“Monkey测试”是一种常用的压力测试方法,它通过模拟用户的一系列随机操作来检测应用的稳定性和健壮性。Monkey测试能够帮助开发者发现潜在的应用崩溃、无响应以及其他异常行为。下面将...

    如何保证移动应用的稳定性.pdf

    该平台的架构支持实时、可靠、全面的应用崩溃、ANR等错误捕获,卡顿、启动分析等性能监控能力,并且支持多场景、多通道的智能告警监控。这使得开发者可以高效地还原异常、卡顿用户的访问路径和业务现场,缩短故障...

    手机开发过程中的问题和解决方法

    Android SDK提供的支持库可以提供向下兼容的功能,同时,利用Google提供的Android Emulator或真实设备进行多版本测试至关重要。 再者,用户体验也是手机应用成功与否的关键因素。良好的界面设计和交互体验能提升...

    APP质量监控与性能优化.pptx

    - **SDK工具Appetizer**:提供了丰富的监控能力,包括Java层的异常检测、ANR、主线程卡顿、功能切换埋点、HTTP抓包、CPU和内存使用率、功能覆盖率、网络流量以及超慢时序关系等。 - **接入方式**:支持多种接入...

    Android程序研发源码Android 无闪烁启动画面程序源码.rar

    9. **测试与调试**:在不同设备和Android版本上进行广泛的测试,确保启动画面在各种情况下都能正常工作且无闪烁。 在提供的"FlashScreen"源码中,开发者可能已经实现了上述的一些技术点。通过研究源码,你可以更...

    andriod 企业开发资料大全

    理解主线程和工作线程的区别,以及何时使用Handler、AsyncTask或RxJava来处理异步任务,能够避免应用出现卡顿或ANR(Application Not Responding)问题。 最后,了解Android的安全性和隐私保护原则是企业开发的重要...

    AndroidCore:核心模块,其中包含实用程序和对Android应用程序开发有用的存根

    这些工具确保了后台任务的执行,避免了应用的卡顿和ANR问题。 5. **MVVM架构**:为了遵循最佳实践,AndroidCore可能实现了Model-View-ViewModel(MVVM)架构,这是一种将业务逻辑与用户界面分离的设计模式。...

    Android编程之高效开发App的10个建议

    可以使用如StrictMode等工具来检测潜在的性能问题,同时,通过合理使用线程管理,将耗时操作放在后台执行,避免阻塞主线程,防止出现ANR(Application Not Responding)错误。 1. **高效利用线程**:尽量避免在主线...

    安卓Gallery照片墙画廊图库相关-图片浏览器.rar

    9. **性能优化**:如何处理大量图片以避免内存泄漏和ANR错误,比如使用Picasso、Glide等第三方库进行图片加载。 通过分析和实践这个源码,开发者可以提升自己在Android图像处理、用户界面设计和性能优化等方面的...

Global site tag (gtag.js) - Google Analytics