概述
Crash、FC、froce close
发生场景
应用进程崩溃。强制关闭,android App 因为代码异常导致奔溃。
表现形式主要有两种
1. Java 代码引起,弹出错误的提示框,JVM虚拟机退出,绝大多数的工具可以捕获。
2. C++代码引起,没有任何提示,直接回到桌面,所谓的闪退,一般是Linux程序退出,大部分发生在视频,游戏类与底层密切相关的软件上
发生问题的原因
1. Error //程序错误
OOM(out of memory error) //内存溢出
StackOverFlowError //堆栈溢出错误
2.RuntimeException//运行时异常----需要了解Exception机制,比如空指针啦,类没有找到啦,资源没找到,就连Android API使用的顺序错误也可能导致(比如setContentView()之前进行了findViewById()操作)
常见的异常(分了十大类,在开发的过程中逐渐补充):
一.Java语法相关的异常
二.Activity相关的异常
三.序列化相关的异常
四.列表相关的异常
五.窗体相关的异常
六.资源相关的异常
七.系统碎片化相关的异常
八.SQLite相关的异常
九.不常见异常
十.其它异常
发生crash怎么办
获取问题发生时的堆栈信息和日志
Eclipse logcat
Adb logcat获取缓存,adb logcat –v time> d:
解决办法
看log,定位问题
Crash问题的定位关键词,crash,Fatal,caused by。
caused by是真正的原因,提供包名+类名+方法名+行号等的关键信息
查看日志,定位到问题是哪里抛出来的异常,什么情况下回抛出异常,这时候需要一套源代码,或者OpenGrok的网站,
http://androidxref.com/
如何避免crash
1. 在程序中重要的地方,容易出错的进行try catch捕获异常,自己捕获异常,处理异常,
2. 优化代码提高代码质量,通过各种工具如findbugs查找代码漏洞
Crash问题的背景分析
对于一个开发者来说,crash会带来用户的投诉,差评,甚至卸载,属于A级bug,必须解决
传统的做法是:等待用户反馈,被动
先进的做法:一个健壮的APP应该能够搜集运行中所有的Crash信息,已知的异常,不严重的问题,我们可以进行捕获,但我们不可能在所有的方法中添加try……catch……进行保护,需要一个统一的方法进行一网打尽,UncaughtExceptionHandler,我们一般设计一个CrashHandler类继承自UncaughtExceptionHandler,重写UncaughtException方法,进行异常捕获并处理,注意该方法只处理未被捕获的异常,try……catch捕获的异常需要自己去处理。UncaughtExceptionHandler如何接入?我们只需要在Application初始化的时候获取实例,进行设置。
CrashHandler crashHandler = CrashHandler.getInstance();
crashHandler.init(this);
市面上应对APP线上的Crash问题一般有两种方法,记录到第三方平台或者记录到自己的数据库中。无论使用第三方或者自己的,都需要一个类作为入口进行收集crash信息,
使用第三方的SDK,收集问题,上传堆栈信息日志到平台,并且提供统计数据,帮助开发者改善用户体验,除此之外,还提供技术支持,告诉你bug怎么修复。推荐崩溃大师+腾讯bugly,这些第三方的SDK官网都有详细的说明,有空了研究下
最后
以上就是昏睡汽车为你收集整理的Android系统稳定性----Crash发生场景发生问题的原因常见的异常(分了十大类,在开发的过程中逐渐补充):发生crash怎么办解决办法如何避免crashCrash问题的背景分析的全部内容,希望文章能够帮你解决Android系统稳定性----Crash发生场景发生问题的原因常见的异常(分了十大类,在开发的过程中逐渐补充):发生crash怎么办解决办法如何避免crashCrash问题的背景分析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复