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

  

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

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

 

posted @ 2013-05-14 19:38  圣骑士wind  阅读(6217)  评论(0编辑  收藏  举报