正常情况下安卓无响应的原因(ANR)

只有应用程序的 UI 线程响应超时才会引起 ANR,超时产生原因一般有两种。
一、当前的事件没有机会得到处理,例如 UI 线程正在响应另外一个事件,当前事件由于某种原因被阻塞了。
二、当前事件正在处理,但是由于耗时过长没有及时完成。
根据 ANR 产生的原因不同,超时时间也不尽相同,从本质上讲,产生 ANR 的原因有三种,大致可以对应到 Android 中的四大组件中的三个(Activity/View,BroadcastReceived 和 Service)。
1.View 的按钮事件或者触摸事件在特定的事件(5秒)内无法得到响应。
2.BroadcastReceived 的 onReceived 运行在主线程中,在特定的事件(10秒)内无法完成处理。
3.Service 的各个生命周期函数在特定事件(20秒)内无法完成处理。

当然这些都是正常情况下的ANR,我今天要说的是我遇到的一次比较特殊的ANR。
我花了一个星期时间去找为什么会在某一时间突然出现爆发性的ANR,只要操作稍微频繁一点就会出现无响应导致系统停掉,严重时会重启10几次才能正常。我找android studio的报错信息也找不出真正的原因。后来我在我们的管理平台上找到的反馈是“com.alibaba.fastjson.parser.DefaultJSONParser.parse”这一段报错信息。该报错信息是因为alibaba fastjson版本过低导致的无响应错误,那我们该如何解决呢?

首先找到项目中的build.gradle然后在里面找有没有compile 'com.alibaba:fastjson:x.x.xx'这样的代码。
然后把它改成1.2.63版本以上即可解决问题。
本人使用的是1.2.73版本(推荐使用)。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐