返回介绍

6.9 不明觉厉的异常

发布于 2024-08-17 23:46:12 字数 1368 浏览 0 评论 0 收藏 0

不是所有的Crash都能找到原因,比如说内存爆了,也就是OOM,但是表现为其他的症状,也有可能是混淆的问题。

对于线上的Crash,我们要本着“为什么开发期间没有发现”的思路来进行修复,调试期间没有问题但是到了线上就有问题了,原因有几种:

·测试不充分,有些场景没有考虑到。

·服务器返回给App的数据不规范,而App又没做容错处理。恰恰测试时数据是没问题的,上线后服务器返回的数据不规范,就会有各种崩溃。

·也有可能是在线上调试,没写好的代码抛出来的异常。这种Crash永远不会重现。我们需要排除这样的Crash,否则会浪费大量的人力在上面。

其实,很多线上Crash都是无厘头的,让人无从下手修复。我在这里教大家一种简单有效的办法,那就是发现这样的线上Crash,在出错的代码行加上try…catch…语句,专门捕获这种异常。记得在catch语句中将这次异常发送到服务器,并把crash_type标记为0(线上Crash的这个值为1),这样我们就能在每天几千个Crash中捕获到一些,而阻止应用不崩溃了。

当我们捕获到这种异常,尽量不要让程序崩溃,而是退回到上一个页面,请用户重新操作一遍。之前的操作可能会因为各种各样的原因而引发异常,重新操作一遍能极大减少这种情形。但如果每次退回后重新操作还是这种崩溃,那么就要重点对待了,有可能是MobileAPI脏数据,有可能是某款机型不兼容,有可能就是一个代码上的bug,具体情况具体分析。

6.9.1 内存溢出

异常中的关键字:

OutOfMemoryException

发生频率:★★★★★

我们时常抱怨Android系统为每个App分配的内存太小,只有几十兆,殊不知在AndroidManifest.xml中有个参数可以设置:

<application android:largelHeap="true"

这样就能增加系统为当前App分配的内存了,甚至到100MB以上。使用后,OOM的崩溃明显减少很多。

但是,天底下没有免费的午餐。当内存很大的时候,每次GC的时间也会长一些,性能就会下降。Android官方给的建议是,作为程序员的我们应该努力减少内存的使用,使用回收和复用的方法,而不是想方设法增大内存。

6.9.2 Verify Failed

异常中的关键字:

java.lang.VerifyError:Rejecting class xxxx.package.activityA that attempts to sub-class erroneous class xxxx.package.Activity基类

发生频率:★★★★

这个问题至今没有查到原因。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文