您的位置:首页 > 编程语言 > Java开发

安卓 java.lang.StackOverflowError 错误检查,特别是部分低端机型

2016-02-27 17:47 399 查看

java.lang.StackOverflowError这个问题开发的人都知道是调用堆栈过深导致,在java中常出现在递归调用出不来的情况。在安卓里经常是UI  view嵌套层级过深导致。



重点记录下嵌套层级过深的查错流程:

当前页面找到最复杂的块,例如listView,table,viewPager等。
细化到最底层的xml上,例如一个item,一个复杂的layout。(特别小心,一个listview块还有header之类的,不仅仅是item,一定要搞最深的,或者干脆删掉一块再往下走)
xml删层级,先降低到xml上只剩2层,看看是否崩溃,在逐步增加。找出当前xml最大支持的层级数。(如果最大只支持2层,那恭喜你,你父级太复杂,接着往上找吧)
根据最大层级,修改代码来减,这个xml不行,就看父级能不能减,一直往上跟踪。(特别注意,有些自定义控件或者include的里面可能多得很呢)
找到哪里要减不要急着改代码,先把层级减下去确保方案可行,再改代码,把该调研的调研完,千万别代码改了又出诡异的问题。

查层级的时候,并不是一个控件就一级的。



textView:本身就有2层,如果调用setMovementMethod(给textView加点击或者滑动效果),一旦加了这个方法,那么textView会变成4层。原理上其实就是在textView中用了SpannableStringBuilder,就会变成4层。如果textView有android:ellipsize="end"属性,则会再增加1层。

RelativeLayout:如果里面没东西的话,本身是不算层级的。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ANDROID 递归 java