前述
之前一直做系统,最近公司项目需要,带领一帮兄弟做起了应用。发现个问题,做应用的兄弟们遇到稳定性相关的问题,好多人感觉无所适从。究其原因可能跟在技术上投入的时间不多吧。作为项目的负责人,我希望项目做完后,大家技术上多少有点成长。于是乎准备个专题奉献给那些一看到稳定性问题就无所适从的兄弟。希望有所帮助。
Android稳定性问题简述
从2种分类探讨Android稳定性问题
没有特别官方的说法说稳定性问题,暂时分为ANR和crash问题和大家探讨:
- ANR (Application Not Responding)应用无响应问题
- Crash导致的进程崩溃
说好了为了讨论和学习,自己大概这么分一下,非官方,或许不那么科学,这2种问题可能就事论事,相互独立,也可能错综复杂,相互影响:比如某些crash问题可能正是导致ANR的原因;或者某个系统进程的ANR导致系统重启;又或者某个显示进程的crash导致的冻屏。
ANR 问题简述
做应用的兄弟都知道,Android的ui刷新必须在主线程(又称作UI线程)中执行,如果出现显示刷新过慢,或者UI响应过慢,就会报告ANR。ANR是Android为了监控应用性能而特有的一种纠错机制。

ANR的触发是由于主线程执行过慢引起,真正实现此机制的业务都在系统进程(systemserver)中,通过源码中(在线opengroke源码网站: androidxref.com)搜索appNotResponding(显示ANR提示的UI方法)再说说ANR分为几种场景:

调用appNotResponding的方法有
- appNotRespondingViaProvider
- inputDispatchingTimedOut
- serviceForegroundTimeout
- serviceTimeout
- broadcastTimeoutLocked
可以看到ANR 的4给场景是 输入事件 广播 service 和 contentprovider

后面的发文中会细细讲到这些场景的触发流程。
知道ANR在哪些场景下触发,而且最重要的是,遇到这种问题怎么解决?
后面会把解决ANR问题的一些套路写出来。
Crash相关问题简述

java crash
java层的crash就是java层未被捕获的异常。如空指针,数组越界,参数不对等。
native crash
native crash是native 代码出现问题,一般伴随有系统异常信号 例如signal 9 -kill 掉进程,signal 11-内存访问出错,signal 3-退出进程等。
Android应用稳定性:ANR与Crash解析
本文探讨了Android应用的稳定性问题,主要关注ANR(Application Not Responding)和Crash两大类别。ANR是由于主线程执行过慢导致的,包括输入事件、广播、Service和ContentProvider四种触发场景。Crash则分为Java层和Native层,涉及各种未捕获异常和系统信号。后续文章将深入讲解这些问题的解决策略。
2957

被折叠的 条评论
为什么被折叠?



