anr

分析安卓ANR tombstone使用ndk-stack addr2line

断了今生、忘了曾经 提交于 2020-04-07 07:56:34
刷机过程中会碰到很多crash问题,此时安卓会在/data/tombstones目录下保存9个session文件,如下 root@android:/ # find . |grep tombs ./data/tombstones ./data/tombstones/tombstone_00 ./data/tombstones/tombstone_01 root@android:/ # 每个tombstone文件里包含如下信息: Build fingerprint Crashed process and PIDs Terminated signal and fault address CPU registers Call stack Stack content of each call 下面讲述怎么使用ndk-stack和addr2line来跟踪tombstone文件里的错误信息: 1、安装NDK,设置环境变量 export ANDROID_NDK_PATH=/home/bytesthink/tools/android-ndk-r8d/ PATH= $ANDROID_NDK_PATH:$PATH 2、执行ndk-stack命令,其中--sym指向AOSP编译目录中符号路径 --dump指向要调试的tombstone文件 bytesthink@ubuntu:~/tools/android

app测试面试题

巧了我就是萌 提交于 2020-03-09 11:21:42
app测试面试题 前言 现在面试个测试岗位,都是要求全能的,web、接口、app啥都要会测,那么APP测试一般需要哪些技能呢? 面试app测试岗位会被问到哪些问题,怎样让面试管觉得你对APP测试很精通的样子? 本篇总结了app测试面试时候经常被问的10个相关问题 1.什么是activity? 2.Activity生命周期? 3.Android四大组件? 4.app测试和web测试有什么区别? 5.android和ios测试区别? 6.app出现ANR,是什么原因导致的? 7.App出现crash原因有哪些? 8.app对于不稳定偶然出现anr和crash时候你是怎么处理的? 9.app的日志如何抓取? 10.你平常会看日志吗, 一般会出现哪些异常(Exception)? 1.什么是activity 什么是activity,这个前两年出去面试APP测试岗位,估计问的最多了,特别是一些大厂,先问你是不是做过APP测试,那好,你说说什么是activity? 如果没看过android的开发原理,估计这个很难回答,要是第一个问题就被难住了,面试的信心也会失去一半了,士气大减。 Activity是Android的四大组件之一,也是平时我们用到最多的一个组件,可以用来显示View。 官方的说法是Activity一个应用程序的组件,它提供一个屏幕来与用户交互,以便做一些诸如打电话

Android两种常见错误(ANR和FC)解决办法

牧云@^-^@ 提交于 2020-03-01 10:10:52
ANR(Activity Not Respone)(无响应) 先介绍下Main线程(也称为UI线程、主线程) 功能: 1.创建UI控件 2.更新UI控件状态 3.事件处理 限制:Main线程不建议有超过5秒的事件 出现条件: 当用户输入事件5s内没有得到响应,将弹出ANR对话框 广播接收者的onReceive()执行时间超过10s 解决方案(原则): 所有可能的耗时操作都要在子线程()中执行 常见耗时操作: I/O:网络操作 SDcard 数据运算 FC(Force close) 原因: 1.Error OOM(out of memory error) StackOverFlowError 2.RuntimeException 解决办法: 看日志 子线程不能更新UI的解决思路: 1、 将子线程执行结果发送到Main线程:handler+massage线程间通讯 发送消息: Message msg = mHandler .obtainMessage( UPLOAD , json ); mHandler .sendMessage( msg ); 接收消息: public void handleMessage(Message msg ) { switch ( msg . what ) { case UPLOAD : mTextView2 .setText((String) msg .

平台支持monkey命令并过滤日志展示-安卓

耗尽温柔 提交于 2020-02-26 11:38:28
前言: 做测试开发有一段时间了,总会碰到各种各样的问题,特此记录下,已做备忘; 任务目标: 最近接手的工作是需要在平台上集成monkey命令,支持命令执行并对日志进行筛选,将包含exception、crash和anr的记录筛选出来并统计出现次数; 任务整理与分析: 1.实际概况: 平台部署在linux服务器上;用户使用自己的电脑(win)连接真机(安卓)执行monkey命令; 2.思路分析: 1)服务器需要收集执行monkey命令的主机信息(主机名,IP地址等); 2)通过收集到的主机信息,控制主机执行monkey命令; 3.技术选型: 1)通过redis上传主机信息; 2)jsonp跨域传递命令,flask本地运行,接收命令并使用subprocess的Popen模块执行命令,执行后将结果返回给服务器并展示; 项目实施: 1.收集主机信息: 前提:用户本机需准备好python环境并安装flask和redis模块;本机配置好adb环境; 执行:运行提供的salve.py文件,上传主机信息; 代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 import flask , redis , os , socket from flask import request from subprocess import *

一文搞懂ANR

怎甘沉沦 提交于 2020-01-24 20:40:19
1.ANR的定义 ANR(Application Not Responding):应用无响应 即主线程在特定的时间内没有完成特定的事情,就会产生ANR。 在Android当中有以下几种ANR的类型: KeyDispatchTimeout,input事件在5秒内没有处理完; ServiceTimeout,前台service在20秒内,后台service在200秒内没有处理完; BroadcastTimeout,BroadcastReceiver的onReceiver,前台广播在10秒内,后台广播在60秒内没有处理完; ProcessContentproviderPublishTimeoutLocked,ContentProvider publish在10秒内没有处理完; 2.各种场景产生ANR的原因 我们分别针对这几种场景来看看,系统是如何抛出ANR异常的 2.1 ServiceTimeout 首先我们来看下一个Service启动的流程,如下图所示 我们来看下ActiveServices.realStartServiceLocked的源码, private final void realStartServiceLocked ( ServiceRecord r , ProcessRecord app , boolean execInFg ) throws RemoteException

android应用的响应性设计

被刻印的时光 ゝ 提交于 2020-01-24 03:57:25
源地址:${android-sdk-windows}/docs/guide/practices/design/responsiveness.html 你写的代码 也许能够通过世界上所有的性能测试,但是当用户使用你的这个应用的时候却可能会发狂。因为,你的应用程序的用户响应性太差了,比如用起来不够流畅,在关键的时刻挂起或者失去响应,或者花费了太多的时间用来处理用户的输入。 在android系统中,当应用程序在一段时间内没有响应的时候,系统会检测到此种情况,并且向用户显示一个对话框,这个对话框被称为“ANR”对话框(Application Not Responding)。这个时候用户可以选择继续等待程序运行,也可以选择强制关闭此应用。但是,如果每次使用这个应用都要看到这个对话框并且选择操作,显然用户不会很爽。所以,在你的设计中,添加对应用响应性的考虑,以避免系统弹出这个ANR对话框,就显得非常重要。 通常情况下,如果应用不能够响应用户的输入,系统就会显示这个ANR对话框。比如,如果一个应用因为IO操作而阻塞(通常是访问网络),那么应用的主线程就不能处理用户输入的事件。一段时间后,系统推测出该应用已经“僵死”,那么就会显示这个ANR对话框来给用户关闭这个应用的选择。 类似的,如果你的应用花费大量的时间在内存中构建一个复杂的数据结构,或者可能是计算游戏中的下一个移动点

android学习笔记----ANR

亡梦爱人 提交于 2020-01-24 03:56:37
保持您的应用程序响应 编写能够赢得世界上所有性能测试的代码是可能的,但是仍然感觉迟钝,挂起或冻结很长时间,或者处理输入需要很长时间。应用程序的响应能力可能发生的最糟糕的事情是“应用程序无响应”(ANR)对话框。 在Android中,系统会通过显示一个说明您的应用已停止响应的对话框(例如上图中的对话框)来防范一段时间内响应不足的应用程序。此时,您的应用程序在相当长的一段时间内没有响应时间因此系统为用户提供退出应用程序的选项。设计应用程序的响应性至关重要,因此系统永远不会向用户显示ANR对话框。 本文档描述了Android系统如何确定应用程序是否没有响应,并提供了确保应用程序保持响应的指南。 什么触发ANR? 通常,如果应用程序无法响应用户输入,系统将显示ANR。例如,如果应用程序阻止UI线程上的某些I / O操作(通常是网络访问),则系统无法处理传入的用户输入事件。或许应用程序花费太多时间构建精心设计的内存结构或计算UI线程中游戏中的下一步行动。确保这些计算有效是非常重要的,但即使最有效的代码仍然需要时间来运行。 在任何情况下,如果您的应用程序执行一个潜在的长时间的操作,那么 您不应该在UI线程上执行这项工作。 而是创建一个工作线程,并在那里完成大部分工作。这使得UI线程(驱动用户界面事件循环)保持运行,并阻止系统断定您的代码已冻结。因为这种线程通常是在类级别完成的

Android最佳实践之响应灵敏性

一笑奈何 提交于 2020-01-24 03:44:29
可能会存在这样的情况,你写的代码通过了世界上所有的性能测试,但当用户尝试使用你的应用程序时,仍然让用户感到不爽。应用程序响应不够灵敏的地方包括——反映迟钝,挂起或冻结很长时间,或者需要花费很长的时间来处理输入。 在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择让程序继续运行,但是,他们在使用你的应用程序时,并不希望每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样,系统不会显示ANR给用户。 一般说来,如果应用程序不能响应用户输入的话,系统会显示一个ANR。例如,一个应用程序阻塞在一些I/O操作上(通常是网络访问),这时,应用程序的主线程就不能再处理用户的输入事件。经过一定的时间后,系统认为应用程序已经挂起,并显示ANR来让用户选择杀死应用程序。 相似地,如果你的应用程序花费太多的时间来构建详细的内存结构,或者也许是在游戏里花费太多时间来计算下一步移动,这时,系统会认为你的应用程序已经挂起。因此,确保这些计算是高效的往往很重要,但即使是最高效的代码仍然需要花费时间来运行。 在这两种情况下,解决的方法通常是创建一个子线程,然后在线程里做你的大部分工作。这能让主线程(驱动UI事件循环)保持运行

python uiautomator2 新版本2.4.6之watcher的玩法

岁酱吖の 提交于 2020-01-13 11:20:24
最近将uiautomator2升级到最新版本了,运行之前的脚本发现涉及watcher部分的全部报错,大家来看看新版本的watcher如何玩 用法举例 注册监控 # 常用写法,注册匿名监控 d.watcher.when("安装").click() # 注册名为ANR的监控,当出现ANR和Force Close时,点击Force Close d.watcher("ANR").when(xpath="ANR").when("Force Close").click() # 其他回调例子 d.watcher.when("抢红包").press("back") d.watcher.when("//*[@text = 'Out of memory']").call(lambda d: d.shell('am force-stop com.im.qq')) 监控操作 # 移除ANR的监控 d.watcher.remove("ANR") # 移除所有的监控 d.watcher.remove() # 开始后台监控 d.watcher.start() d.watcher.start(2.0) # 默认监控间隔2.0s # 强制运行所有监控 d.watcher.run() # 停止监控 d.watcher.stop() # 停止并移除所有的监控,常用于初始化 d.watcher.reset()

anr 问题处理

自作多情 提交于 2019-12-10 00:18:34
com.xvideostudio.videoeditor 这个应用发生无响应 1. 在system log里面搜索关键字,ANR in,定位到下面的地方 11-01 15:52:37.386071 1148 1273 I AnrManager: ANR in com.xvideostudio.videoeditor (com.xvideostudio.videoeditor/.activity.ConfigGifActivity), time=24740223 11-01 15:52:37.386071 1148 1273 I AnrManager: Reason: Input dispatching timed out (Waiting to send non-key event because the touched window has not finished processing certain input events that were delivered to it over 500.0ms ago. Wait queue length: 2. Wait queue head age: 10273.7ms.) 11-01 15:52:37.386071 1148 1273 I AnrManager: Load: 33.27 / 34.07 / 33.02 11-01