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

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


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

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


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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值