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