Android布局嵌套太深导致的错误:StackOverflowError

一. Android项目的UI调整,下午调试了很久都不明白的一个错误,debug中报错如下:

  结果问了问XD,他就提出要看我的布局。。

  因为代码是分了好几层叠加在一起的,所以布局文件较多(一层一层找位置add进来的)。。

  然后他就告诉我是因为布局层数太深,就会导致堆栈溢出这样的崩溃。

  我大致算了一下,我的代码几个布局加起来大概有14层左右。然后还有底层其他部分的布局,可想而知。

 

  因为觉得不甘心,所以又写了一个小程序测试一下到底布局嵌套可以有多深。

  新建了一个HelloWorld程序,将布局改为如下:

   

  后面省略。。

  经过实验,加到第22层的时候就崩溃了,报错如下:

  应该跟具体软硬件环境也有关系,用的测试手机是MX 2.3.5的系统。

 

  附上布局文件,如果你也有兴趣试一试。

test_layout.xml

  

  建议就是:首先,重新考虑并重写布局。

  其次,再搜索一下布局优化方法之类的。

二.

? ? ? ? ?最近做的一个安卓项目,由于层级复杂导致层级嵌套过多,结果在htc上的一款机器上长按文档框崩溃,报堆栈溢出异常,??java.lang.StackOverflowError
? ? ??android SDK中对该错误的出现的场景描述为:由于栈调用的层次太多,超过了虚拟器dalvik的最大限制(作为一个虚拟器参数,可定制)导致的。当程序编写错误导致无限递归调用时会触发,此外程序正确但是递归调用的层次过深也会触发。网上查找资料发现安卓布局层级过多也会导致这个异常。在 Android SDK 中包含了一个Heirachy Viewer 工具,在sdk tool 文件中,使用该工具可以在您的程序运行的时候分析程序的布局。使用该工具来发现布局中的瓶颈所在。Hierarchy Viewer 让你选择其连接的设备或者模拟器中的一个运行中的程序,然后显示该界面的布局树形结构。在每个控件方块中的交通灯分别代表 计算尺寸(Measure)、布局子控件(Layout)、和绘制的性能,通过颜色来帮助您分析潜在的问题。 使用这个工具可以很清晰的看到当前页面的层级结构,发现我的Edittext ?处于10级以上,层级太深,尝试着优化布局。

? ??1、使用<include /> 标签来重用layout代码,如果在一个项目中需要用到相同的布局设计,可以通过<include /> 标签来重用layout代码
? ? ?2、使用<merge /> 标签来减少视图层级结构,merge也有一些使用限制: 只能用于xml layout文件的根元素;在代码中inflate一个以merge为根元素的布局文件时候,你需要指定一个ViewGroup 作为其容器,并且要设置attachToRoot 为true
? ? ? ?最终使用merge标签,替换掉include中的根节点,解决上面的问题。


以上转自:

http://www.cnblogs.com/mengdd/archive/2013/05/14/3078367.html

http://www.chengxuyuans.com/Android/62941.html

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值