Android系统稳定性----Crash
2016-05-08 22:28
253 查看
Crash、FC、froce close
表现形式主要有两种
1. Java 代码引起,弹出错误的提示框,JVM虚拟机退出,绝大多数的工具可以捕获。
2. C++代码引起,没有任何提示,直接回到桌面,所谓的闪退,一般是Linux程序退出,大部分发生在视频,游戏类与底层密切相关的软件上
Error //程序错误
OOM(out of memory error) //内存溢出
StackOverFlowError //堆栈溢出错误
2.RuntimeException//运行时异常----需要了解Exception机制,比如空指针啦,类没有找到啦,资源没找到,就连Android
API使用的顺序错误也可能导致(比如setContentView()之前进行了findViewById()操作)
二.Activity相关的异常
三.序列化相关的异常
四.列表相关的异常
五.窗体相关的异常
六.资源相关的异常
七.系统碎片化相关的异常
八.SQLite相关的异常
九.不常见异常
十.其它异常
Eclipse logcat
Adb logcat获取缓存,adb logcat –v time> d:\
Crash问题的定位关键词,crash,Fatal,caused
by。
caused by是真正的原因,提供包名+类名+方法名+行号等的关键信息
查看日志,定位到问题是哪里抛出来的异常,什么情况下回抛出异常,这时候需要一套源代码,或者OpenGrok的网站,
http://androidxref.com/
在程序中重要的地方,容易出错的进行try catch捕获异常,自己捕获异常,处理异常,
2.
优化代码提高代码质量,通过各种工具如findbugs查找代码漏洞
传统的做法是:等待用户反馈,被动
先进的做法:一个健壮的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 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自定义View的一般步骤
- 使用 Intel HAXM 为 Android 模拟器加速,媲美真机
- 解决ubuntu下Android Studio出现“aapt” IOException error=2, No such file or directory问题
- Android的监听滞后性
- Android开发实用代码片段(一)
- 十九、适配器设计模式
- android studio NDK 开发初探
- android Fragment java.lang.IllegalStateException:The specified child already has a parent.
- Android基础知识:Activity生命周期和Intent用法
- 【Android】系统音量及屏幕亮度调节
- Android中使用Gesture加入手势操作
- Android中Java和JavaScript交互
- Android中的多点触摸
- Android中的adapter
- android 之popupWindow 在指定位置上的显示
- 20145205《Java程序设计》第四次实验:Android环境搭建
- android bt使用
- android中对服务端的长连接【socket】
- AnyChat音视频通信实现