app常见的 闪退及闪退的原因

背景:

最近一直在休假,把自己在工作中梳理的点点滴滴汇总整理,这样既能及时地让自己巩固各个要点,也希望通过自己整理的东西帮助其他的同行少走弯路,避开我之前踩过的大大小小,深深浅浅的坑。

此问题经常在面试中会被问到,那么作为经常测试app,是不是应该花点心思搞清楚啊。。。。。

以下基于我多年的测试经验,以及遇到的情况做个汇总,如果有写得不恰当的地儿,欢迎各位博客好友们帮忙指正。

一、闪退的介绍

分别是从以下三个方面来说明

  1. 闪退的定义
  2. 表现症状
  3. 原因分类

二、闪退的原因

 

三、android常见的异常

android常见的异常有 十大类,其中,空指针,非法参数,数组角标越界是最常见的。

 

四、其他

主要是从设计【测试用例思路】角度覆盖更多的场景

总结

app测试过程中,出现闪退时,先保存现场,导出对应的日志信息,然后找复现路径。

不管是必现还是偶现的,都应该提交bug记录:

(1)若是必现闪退时,则描述清楚,如,

使用XX设备(android11)进入XX详情页面时,应用闪退(操作步骤、日志信息参考详情)

(2)若是非必现问题,则需要描述清晰,在哪个模块,哪个页面进行了哪些操作出现闪退(操作步骤、日志信息参考详情)

备注:

导出崩溃日志后,建议自己优先看下,属于哪种类型的崩溃,然后根据当时所处的境况把log信息提交bug还是发给开发再进行测试验证,但是不管怎么样,发现的问题一定要及时提交JIRA记录,开发解决后,询问下产生此崩溃的根源,是哪个方法用错啦,还是因其他原因导致的,建议把根源弄清楚后,再确认下解决方案是什么,开发用什么方式解决此崩溃,try-catch一下,还是其他的,不管哪种方式,都要再次确认下,免得引发相关的问题。我之前在ios上提了一个闪退问题,开发修复后,引发了7个闪退,可把我吓懵了。然后打回去让开发重新检查代码修复。解决之后才弄清楚因为第一个崩溃是XX核心库的XX问题,好多地方都用到这个,而开发了某一处,其余地方未做处理才引发新的问题。这类问题就警示开发修复闪退问题后,至少要做自测检查。

关于ios的闪退待补充~~~~~

 

 

<think>好的,我现在需要回答用户关于分析和定位App闪退原因的工具推荐的问题。用户之前提到安徽大众集团的招投标信息,但现在的问题转向技术领域,特别是Android应用闪退的分析工具。首先,我需要回顾之前的对话,确保符合用户当前的上下文。 用户引用了三个关于APP闪退的例子,其中提到了使用Android Studio、日志分析、以及处理空指针异常的情况。用户现在明确要求推荐用于分析和定位闪退原因的工具。因此,我需要整理常见的工具,并结合引用中的案例进行说明。 首先,确定用户可能需要哪些类型的工具:调试工具、日志分析工具、内存检测工具、UI自动化测试工具等。然后,每个工具需要简要介绍其功能和使用场景,最好结合用户提到的例子,比如Android Studio的调试功能,或者处理空指针的日志分析方法。 接下来,要确保回答结构清晰,分点说明,每个工具附带使用场景和示例,帮助用户理解如何应用这些工具。同时,用户可能需要一些实践建议,比如如何设置断点、分析日志中的Exception字段,或者使用自动化工具捕捉偶现的闪退。 还需要注意用户可能的技术水平,回答要尽量详细但不过于复杂,确保用户能够根据推荐的工具和步骤进行操作。此外,生成的相关问题需要与主题紧密相关,比如询问日志分析的具体方法,或如何预防空指针异常。 最后,检查是否符合之前的系统级指令,如使用正确的中文格式、LaTeX语法是否正确(不过这个问题可能不涉及数学公式),以及是否包含相关引用。例如,在提到日志分析时,可以引用用户提供的第三个例子中的Exception字段分析,并添加对应的引用标识[^3]。 总结步骤: 1. 列出主要工具类别:调试工具、日志工具、内存检测工具、自动化测试工具、第三方服务。 2. 每个工具详细说明,结合用户案例。 3. 提供实践建议,如检查空指针、网络状态处理。 4. 生成相关问题,引导用户深入探讨。 5. 确保引用正确,例如在提到日志分析时引用[^3],处理空指针时引用[^2],调试工具引用[^1]。</think>针对App闪退问题的分析和定位,推荐以下工具及方法,并结合实际场景说明其应用: --- ### **一、基础调试工具** 1. **Android Studio Debugger** - **功能**:设置断点、逐行执行代码、监控变量值变化,直接定位崩溃点[^1]。 - **场景示例**: ```java // 断点设置在可能触发空指针的代码行 String address = geocoder.getFromLocation(lat, lng, 1).get(0).getAddressLine(0); ``` 通过调试发现,当网络断开时`geocoder.getFromLocation()`返回空列表,调用`get(0)`导致空指针闪退[^2]。 2. **Logcat日志分析** - **关键操作**:过滤日志中的`Exception`或`FATAL`关键词,快速定位未捕获的异常。 - **示例日志**: ```plaintext 08-16 17:27:01.822 E/System.err: java.lang.NullPointerException: at com.example.app.MainActivity.getAddress(MainActivity.java:45) ``` 此类日志直接指向代码文件和行号,显示空指针异常位置。 --- ### **二、进阶分析工具** 3. **LeakCanary(内存泄漏检测)** - **作用**:自动追踪内存泄漏,避免因内存溢出(OOM)引发的闪退。 - **典型场景**:Activity未正确销毁导致内存累积,最终触发OOM崩溃。 4. **Firebase Crashlytics(崩溃监控平台)** - **功能**:实时收集线上崩溃日志,统计崩溃分布及设备信息。 - **优势**:捕捉用户环境中的偶现崩溃(如电梯内网络断连导致的空指针[^2])。 --- ### **三、自动化测试工具** 5. **Espresso/UIAutomator** - **用途**:模拟用户操作路径,复现特定场景下的闪退(如网络切换、权限拒绝)。 - **示例测试**: ```kotlin // 模拟断网后执行定位功能 onView(withId(R.id.btn_location)).perform(click()) assertNoCrash() // 自定义断言检查是否闪退 ``` --- ### **四、第三方增强工具** 6. **MAT(Memory Analyzer Tool)** - **分析内容**:解析堆转储文件(HPROF),定位内存泄漏对象及引用链。 7. **ADB(Android Debug Bridge)** - **常用命令**: ```bash adb logcat -v time > crash.log # 导出完整日志 adb bugreport # 获取系统级错误报告 ``` --- ### **五、实践建议** - **空指针预防**:对可能为`null`的对象添加判空逻辑: ```java List<Address> addresses = geocoder.getFromLocation(lat, lng, 1); if (addresses != null && !addresses.isEmpty()) { String address = addresses.get(0).getAddressLine(0); } ``` - **网络状态兼容**:在调用网络依赖接口前,检查设备联网状态[^2]。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值