知方号

知方号

导致crash等异常的常见原因分析<造成计算机重启的原因有哪些>

导致crash等异常的常见原因分析

Crash:客户端程序运行时遇到无法处理的错误或异常,导致退出应用程序(崩溃);

1.空指针异常 java.lang.NullPointerException

引起NullPointer有两种比较常见的原因:直接使用一个方法返回的数据,不做NullPoint判断,或不做try catch保护,因此而造成的NullPointer,通常是因为使用者没有考虑到方法会在某些特殊情况会返回null作为一个公共方法,在不做入参检查的情况下,使用参数使用前先判定是否为空,是否存在需要引用的元素,防止因为溢出或引用类型不符合的变量导致错误);

2.堆栈溢出(ooM) java.lang.OutOfMemoryError

OutOfMemoryError通常是两种原因,如下:存在严重的内存泄露,这种问题如果有内存快照通常都是比较好解决的对内存的使用不合理,比如内存中有相同图片,对图片缓存的大小设置不合理,对可能造成OOM的地方未捕获。在Android中decode一张图片通常需要比较大的内存,在decode图片的时候也很容易出现OOM,这种情况通常需要进行捕获;内存泄露,当手机装了一大堆软件之后就会变得非常卡,内存泄露之后正在运行的程序越来越感觉内存不够用,严重的就是不断卡顿然后Crash);

3.数组越界 java.lang.IndexOutOfBoundsException && java.lang.ArrayIndexOutOfBoundsException

这两个异常类似,出现这种异常通常是因为多线程处理数据不同步,出现了越界的情况。比如一个线程在操作一个List的时,另一个线程清空了这个List,这时就会抛出这类异常;使用如果没有进行new一个对象,直接进行使用,添加元素等等操作,会出现错误 ;

4.应用进程被其他进程中断(如任务管理器); 5.系统反应缓慢,导致应用主线程卡死,请求响应超时; 6.CPU负载过高; 7.控件不匹配

xml文件定义和activity中使用的控件不匹配,或者在activity中试图寻找其他xml文件的控件;

8.死锁 9.运行异常 java.lang.RuntimeException

RuntimeException比较常见的有如下两种原因:因为系统调用我们实现的Activity的各个周期方法(onCreate,onResume等)或调用Service的onBinde,unBinde失败,系统抛出RuntimeException这个异常,其根本原因是我们实现的如onCreate,onResume等方法抛出了某种异常而导致的在一个没有调用Looper.prepare()的线程中,通过New Handler()方式创建handler实例

参考: 1.闪退(crash)发生的原因有哪些 https://www.zhihu.com/question/34938240/answer/60494712 2.Android常见Crash原因总结(二) http://blog.csdn.net/zhangcanyan/article/details/51493279

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。