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:如果里面没东西的话,本身是不算层级的。