最近做的一个安卓项目,由于层级复杂导致层级嵌套过多,结果在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中的根节点,解决上面的问题。
相关推荐
在Java编程中,`java.lang.StackOverflowError` 是一个常见的运行时异常,它通常发生在程序执行过程中,当Java虚拟机(JVM)的调用栈溢出时。调用栈是每个线程用来存储方法调用信息的数据结构,当递归调用过深或者...
tomcat内存溢出解决办法,错误信息:java.lang.OutOfMemoryError:PermGen space 参考该文档可快速解决内存溢出的问题,服务器:tomcat
java.lang.StackOverflowError 是一种堆栈溢出错误,指的是在程序中递归调用的层次太深而导致堆栈溢出时抛出的异常。 29. java.lang.ThreadDeath 线程结束 java.lang.ThreadDeath 是一种线程结束,指的是在程序中...
在Java编程语言中,`java.lang.Throwable`是所有错误(Error)和异常(Exception)的顶级父类,它是Java异常处理机制的核心组成部分。这个类位于`java.lang`包中,是Java标准库的一部分,提供了处理运行时问题的标准...
2. **`java.lang.StackOverflowError`** - 当程序递归过深导致栈溢出时抛出此错误。 3. **`java.lang.OutOfMemoryError`** - 当JVM无法分配更多内存时抛出此错误。 4. **`java.lang.InternalError`** - 表示JVM内部...
2. **java.lang.StackOverflowError**: 当递归调用过深导致堆栈溢出时,会抛出这个错误。这通常意味着一个函数或方法在调用自身时没有正确的退出条件。优化递归结构或提高JVM的堆栈大小可以避免这个问题。 3. **...
- **`java.lang.StackOverflowError`**:当栈溢出时抛出,通常由无限递归引起。 - **`java.lang.UnsupportedClassVersionError`**:当JVM版本不支持类文件版本时抛出。 - **`java.lang.VirtualMachineError`**:当...
java.lang.StackOverflowError java.lang.Exception java.io.IOException java.sql.SQLException java.sql.SQLSyntaxErrorException java.lang.RuntimeException java.lang.NullPointerException java.lang....
常见的内存错误包括`java.lang.OutOfMemoryError: Heap space`(堆空间不足)、`java.lang.OutOfMemoryError: PermGen space`(方法区空间不足)和`java.lang.StackOverflowError`(栈溢出)。这些错误通常由于物理...
- 类层次结构:java.lang.Object -> java.lang.Throwable -> java.lang.Error -> java.lang.LinkageError -> java.lang.IncompatibleClassChangeError - 描述:当类或接口的实现不符合其定义时,比如方法签名改变...
去除死循环,解决StackOverflowError错误
- 错误信息:编译器报错提示无法初始化pagecontext,异常为java.lang.StackOverflowError。 - 原因分析:在接口Rollable中定义的成员变量ball的引用被改变了,但接口中的成员变量默认是public static final的,即...
- **`java.lang.StackOverflowError`**:栈溢出时抛出。 - **`java.lang.UnsupportedClassVersionError`**:类版本不受支持时抛出。 ### 异常处理策略 针对以上提到的各种异常,合理的异常处理策略非常重要。以下...
【情况六】:`java.lang.StackOverflowError` 这是线程栈溢出错误,通常是由于方法调用层次过深或者无限递归。解决策略包括优化程序设计,减少不必要的方法调用,或者增大线程栈大小(通过`-Xss`参数)。 总结来说...
如果某个线程的线程栈空间被耗尽,没有足够资源分配给新创建的栈帧,就会抛出 java.lang.StackOverflowError 错误。 线程栈是如何运行的? 首先给出一个简单的程序调用代码示例,如下所示: public class...
java.lang.StackOverflowError 异常的原因是 java 虚拟机栈内存溢出。解决方法是设置线程最大调用深度。参数是 -Xss。 10. java.lang.OutOfMemoryError 异常: java.lang.OutOfMemoryError 异常的原因是 java 堆...
`java.lang.StackOverflowError` 当程序递归调用层次太深或方法栈空间不足时,会抛出`StackOverflowError`。这种异常通常与递归算法的设计有关,或者是由于方法内部无限循环导致的。为了避免这类异常,可以通过...
**定义**: `java.lang.StackOverflowError` 表示程序栈空间耗尽,通常是由于递归调用没有正确终止条件造成的。 **示例**: 下面的代码会导致栈溢出异常: ```java public static void main(String[] args) { main...
栈溢出会导致`java.lang.StackOverflowError`。 - **Program Counter Register**:每个线程都有一个程序计数器,用于记录当前线程正在执行的字节码指令的地址。 - **Native Method Stack**:与本地方法相关,当...