Android常见Crash原因

简介:

1.Java Crash

java代码导致jvm退出,弹出“程序已经崩溃”的对话框,最终用户点击关闭后进程退出。Logcat会在“AndroidRuntime”tag下输出Java的调用栈。

2.Native Crash

No.&Name

Reason

Resolution

Comment

1.空指针

试图对空指针进行操作时(如读取空指针指向的内存),处理器就会产生一个异常

在使用指针前加以判断,如果为空,则是不可访问的。

空指针目前是糯米app最多的一种引起crash的原因,但是它也很容易被发现和修复。

2.野指针

指向的是一个无效的地址,该地址如果是不可读不可写的,那么会马上Crash;如果访问的地址为可写,而且通过野指针修改了该处的内存,那么很有可能会等一段时间(其它的代码使用了该处的内存后)才发生Crash。

  1. 在指针变量定义时,一定要初始化,特别是在结构体或类中的成员指针变量。
  2. 在释放了指针指向的内存后,如该指针不再用应置为NULL
  3. 看代码很难查找,通过代码分析工具也很难找出,只有通过专业的内存检测工具,才能发现这类bug。

数组越界

访问无效的地址。如果该地址不可读写,则会马上Crash;如果修改了该处的内存,造成内存破坏,那么有可能会等一段时间才在别处发生Crash。

  1. 所有数组遍历的循环,都要加上越界判断。
  2. 用下标访问数组时,要判断是否越界。
  3. 通过代码分析工具可以发现绝大部分的数组越界问题。

破坏内存的bug,很难查找。

整数除以零

整数除以零默认的处理方式是终止进程

在做整数除法时,要判断被除数是否为0的情况。

改情况在开发环境下很难出现,但庞大的用户量和复杂的用户输入,就很容易导致被除数为0的情况出现。

格式化输出参数错误

与野指针类似,但是只会读取无效地址的内存,而不会造成内存破坏。其结果是要么打印出错乱的数据,要么访问了无读写权限的内存而立即宕机。

在书写输出格式和参数时,要做到参数个数和类型都要与输出格式一致

 

缓冲区溢出

通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏函数调用的堆栈,修改函数调用的返回地址。如果不是黑客故意攻击,那么最终函数调用很可能会跳转到无法读写的内存区域,造成程序崩溃。

  1. 检查所有容易产生漏洞的库调用,比如sprintf,strcpy等,它们都没有检查输入参数的长度。
  2. 使用带有长度检查的库调用,如用snprintf来代替sprintf,或者自己在sprintf上封装一个带长度检查的函数。

 

内存管理错误

  1. 可用内存过低,app所需的内存超过设备的限制,app跑不起来导致App crash。
  2. 内存泄露,程序运行的时间越长,所占用的内存越大,最终用尽全部内存,导致整个系统崩溃。

 

imageview,图片占据太多内存,糯米app狂刷列表。

相关文章
|
Java Android开发
Android Native Crash问题排查思路
Android Native Crash问题排查思路
1202 0
Android Native Crash问题排查思路
|
监控 程序员 Go
基于友盟U-APM解决客户小姐姐Android Native Crash问题,小姐姐说我真棒,要把她闺蜜介绍给我
客户小姐姐反馈一个Crash问题,但是概率很小,开发和测试都没遇到过。总不能让小姐姐帮忙抓取logcat日志。逼不得已,用上了杀手锏友盟+U-APM神器,重新给小姐姐更新了一版APK。然后,开瓶82年的冰阔落,坐等日志上来。
基于友盟U-APM解决客户小姐姐Android Native Crash问题,小姐姐说我真棒,要把她闺蜜介绍给我
|
Web App开发 运维 Java
mPaaS最佳实践之《Android Native crash处理》
目前 mPaas Android是使用的是Crash SDK对闪退进行的处理,CrashSDK 是 Android 平台上一款功能强大的崩溃日志收集 SDK,有着极高的崩溃收集率和完整、全面的崩溃日志信息,生成的日志内容非常利于问题的跟进和解决。在我们的日常运维中,经常遇到一些闪退,无法直接从闪退堆栈看到原因,尤其是一些非Java的Native的闪退,这里分享下在mPaas框架下怎么使用Crash SDK对闪退进行分析。
517 0
|
存储 数据采集 监控
01.Android崩溃Crash封装库
Android崩溃Crash封装库
1292 0
01.Android崩溃Crash封装库
|
Android开发 开发者
Android Native crash 处理案例分享
Android Native crash 处理案例分享
Android Native crash 处理案例分享
|
监控 调度
04.Android崩溃Crash库之Loop拦截崩溃和ANR
04.Android崩溃Crash库之Loop拦截崩溃和ANR
902 0
|
Java API Android开发
03.Android崩溃Crash库之ExceptionHandler分析
03.Android崩溃Crash库之ExceptionHandler分析
533 0
|
消息中间件 机器学习/深度学习 监控
02.Android崩溃Crash库之App崩溃分析
02.Android崩溃Crash库之App崩溃分析
992 0
|
Java Android开发
Android Native Crash 收集
在 Android 平台上,Native Crash 一直是比较麻烦的问题,因为捕获麻烦,获取到了内容又不全,内容全了信息又不对,信息对了又不好处理。
1285 0
|
监控 Java Android开发
Android Crash的跟踪方法,使用腾讯Bugly来捕捉一些疑难杂症,让我们APP稳定上线
Android Crash的跟踪方法,使用腾讯Bugly来捕捉一些疑难杂症,让我们APP稳定上线 我们在开发中常常会注意到一些Crash,这正是很头疼的,而且Crash会带来很多意想不到的状态,很恶心,所以今天,我们来着重研究一下Crash,同时,我们也将使用第三方SDK,也就是腾讯的Bugly来扑捉这些Crash,让他无所遁形。
3536 0