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


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

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

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

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

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

 

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

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

   

  后面省略。。

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

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

 

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" >

    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第1层" />

    <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" >

        <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第2层" />

        <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" >

            <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第3层" />

            <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" >

                <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第4层" />

                <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" >

                    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第5层" />

                    <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" >

                        <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第6层" />

                        <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" >

                            <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第7层" />

                            <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" >

                                <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第8层" />

                                <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" >

                                    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第9层" />

                                    <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" >

                                        <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第10层" />

                                        <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" >

                                            <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第11层" />

                                            <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" >

                                                <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第12层" />

                                                <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" >

                                                    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第13层" />

                                                    <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" >

                                                        <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第14层" />

                                                        <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" >

                                                            <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第15层" />

                                                            <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" >

                                                                <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第16层" />

                                                                <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" >

                                                                    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第17层" />

                                                                    <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" >

                                                                        <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第18层" />

                                                                        <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" >

                                                                            <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第19层" />

                                                                            <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" >

                                                                                <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第20层" />

                                                                                <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" >

                                                                                    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第21层" />

                                                                                    <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" >

                                                                                        <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第22层" />
                                                                                    </LinearLayout>
                                                                                </LinearLayout>
                                                                            </LinearLayout>
                                                                        </LinearLayout>
                                                                    </LinearLayout>
                                                                </LinearLayout>
                                                            </LinearLayout>
                                                        </LinearLayout>
                                                    </LinearLayout>
                                                </LinearLayout>
                                            </LinearLayout>
                                        </LinearLayout>
                                    </LinearLayout>
                                </LinearLayout>
                            </LinearLayout>
                        </LinearLayout>
                    </LinearLayout>
                </LinearLayout>
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>

</LinearLayout>
test_layout.xml

  

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

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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM