您的位置:首页 > 移动开发 > Android开发

Android系统稳定性----Crash

2016-05-08 22:28 253 查看
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官网都有详细的说明,有空了研究下
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: