一.导致Android Crash 问题的主要类型
JAVA application crash
1.ANR(application no response) crash
2.JAVA uncaught exception crash
System crash
1.Process Crash(Native Crash or C/Delvik Crash)
2.Kernel Crash
3.Modem Crash
1) HW Watchdog
2)SW Watchdog
3)Apps Keepalive
4)Other
由上图可见,在APP层面我们出现并能解决的BUG 集中在App Crash 和System crash 层;
二. ANR(application no response)
(一)导致ANR主要有3种原因:
ANR的产生原因就是由于应用程序的主线程响应超时导致的,只要超过最大限制的超时时间就必然会产生ANR:
1.KeyDispatchTimeout(5 seconds)–按键或触摸事件在特定时间内无响应;(输入事件)
2. BroadcastTimeout(10 seconds)–BroadcastReceiver在特定时间内无法处理完成;(特定操作)
3. ServiceTimeout(20 seconds)–Service在特定的时间内无法处理完成;(特定操作)
(二)处理方法
1.获取实时log: adb logcat -v time >anr.log 或 adb logcat -v time | tee anr.log
2.获取traces.txt文件:adb pull /data/anr/traces.txt C:\monkey
(三)分析log
从log可以看出ANR的类型:
1.cpu使用量接近100%,说明当前设备很忙,有可能是cpu饥饿导致ANR;
2.cpu使用量很低,说明主线程有可能被阻塞;
3.IOwait很高,说明有可能是主线程在进行I/O操作导致ANR;
(四)分析traces
三. Java Crash
(一)Error and exception 的区别
Error(错误):表示系统级的错误和程序不必处理的异常,是java运行环境中的内部错误或者硬件问题,比如,内存资源不足等,对于这种错误,程序基本无能为力,除了退出运行外别无选择;
Exception(异常):表示需要捕捉或者需要程序进行处理的异常,它处理的是因为程序设计的瑕疵而引起的问题或者在外的输入等引起的一般性问题,是程序必须处理的;
(二)常见Java Error and exception
1.现象:系统弹出窗口提示用户某进程崩溃或者直接闪退;
2.Throwable类是Java语言中所有错误或异常的超类;
(1).Error
a.OutOfMemory
b.IOError
c.StackOverflowError
d.UnsatisfiedLinkError
e.其它Error…;
常见Error列表:
(2).Exception
a.RuntimeException (最常见)
b.Checked(编译时检查)
c.其它Exception…;
常见Exception列表: