zoukankan      html  css  js  c++  java
  • 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

      

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

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

     

  • 相关阅读:
    Cocos 更新时反复杀进程,导致差异更新失效的Bug
    Cocos 编译android-studio
    Could not resolve all dependencies for configuration ':classpath'
    MAC Gradle 下载的问题
    命令行创建 keystore
    应用间共享文件 FileProvider
    Android jks 签名文件 生成
    Gradle 离线 安装
    信息
    Cocos Lua的Touch 点击事件添加
  • 原文地址:https://www.cnblogs.com/mengdd/p/3078367.html
Copyright © 2011-2022 走看看