`
hold_on
  • 浏览: 455697 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

android布局太深导致的 java.lang.StackOverflowError

 
阅读更多

E/AndroidRuntime( 1900): java.lang.StackOverflowError 
E/AndroidRuntime( 1900):     at android.graphics.Canvas.drawText(Canvas.java:1269) 
E/AndroidRuntime( 1900):     at android.text.Layout.draw(Layout.java:337) 
E/AndroidRuntime( 1900):     at android.widget.TextView.onDraw(TextView.java:4006) 
E/AndroidRuntime( 1900):     at android.view.View.draw(View.java:6057) 
E/AndroidRuntime( 1900):     at android.view.ViewGroup.drawChild(ViewGroup.java:1545) 
E/AndroidRuntime( 1900):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1281) 
E/AndroidRuntime( 1900):     at android.view.ViewGroup.drawChild(ViewGroup.java:1543) 
E/AndroidRuntime( 1900):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1281) 
E/AndroidRuntime( 1900):     at android.view.ViewGroup.drawChild(ViewGroup.java:1543) 
E/AndroidRuntime( 1900):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1281) 
E/AndroidRuntime( 1900):     at android.view.View.draw(View.java:6060) 
E/AndroidRuntime( 1900):     at android.view.View.buildDrawingCache(View.java:5823) 
E/AndroidRuntime( 1900):     at android.view.View.getDrawingCache(View.java:5661) 
E/AndroidRuntime( 1900):     at android.view.ViewGroup.drawChild(ViewGroup.java:1481) 
E/AndroidRuntime( 1900):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1281) 
E/AndroidRuntime( 1900):     at android.widget.AbsListView.dispatchDraw(AbsListView.java:1322) 
E/AndroidRuntime( 1900):     at android.widget.ListView.dispatchDraw(ListView.java:2841) 
E/AndroidRuntime( 1900):     at android.view.View.draw(View.java:6164) 
E/AndroidRuntime( 1900):     at android.widget.AbsListView.draw(AbsListView.java:2169) 
E/AndroidRuntime( 1900):     at android.view.ViewGroup.drawChild(ViewGroup.java:1545) 
E/AndroidRuntime( 1900):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1281) 
E/AndroidRuntime( 1900):     at android.view.ViewGroup.drawChild(ViewGroup.java:1543) 
E/AndroidRuntime( 1900):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1281) 
E/AndroidRuntime( 1900):     at android.view.ViewGroup.drawChild(ViewGroup.java:1543) 
E/AndroidRuntime( 1900):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1281) 
E/AndroidRuntime( 1900):     at android.view.ViewGroup.drawChild(ViewGroup.java:1543) 
E/AndroidRuntime( 1900):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1281) 
E/AndroidRuntime( 1900):     at android.view.ViewGroup.drawChild(ViewGroup.java:1543) 
E/AndroidRuntime( 1900):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1281) 
E/AndroidRuntime( 1900):     at android.view.ViewGroup.drawChild(ViewGroup.java:1543) 
E/AndroidRuntime( 1900):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1281) 
E/AndroidRuntime( 1900):     at android.view.ViewGroup.drawChild(ViewGroup.java:1543) 
E/AndroidRuntime( 1900):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1281) 
E/AndroidRuntime( 1900):     at android.view.ViewGroup.drawChild(ViewGroup.java:1543) 
E/AndroidRuntime( 1900):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1281) 
E/AndroidRuntime( 1900):     at android.view.ViewGroup.drawChild(ViewGroup.java:1543) 
E/AndroidRuntime( 1900):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1281) 
E/AndroidRuntime( 1900):     at android.view.View.draw(View.java:6060) 
E/AndroidRuntime( 1900):     at android.widget.FrameLayout.draw(FrameLayout.java:352) 
E/AndroidRuntime( 1900):     at android.view.ViewGroup.drawChild(ViewGroup.java:1545) 
E/AndroidRuntime( 1900):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1281) 
E/AndroidRuntime( 1900):     at android.view.ViewGroup.drawChild(ViewGroup.java:1543) 
E/AndroidRuntime( 1900):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1281) 
E/AndroidRuntime( 1900):     at android.view.View.draw(View.java:6060) 
E/AndroidRuntime( 1900):     at android.widget.FrameLayout.draw(FrameLayout.java:352) 
E/AndroidRuntime( 1900):     at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2038) 
E/AndroidRuntime( 1900):     at android.view.ViewRoot.draw(ViewRoot.java:1233) 
E/AndroidRuntime( 1900):     at android.view.ViewRoot.performTraversals(ViewRoot.java:1042) 
E/AndroidRuntime( 1900):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1502) 
E/AndroidRuntime( 1900):     at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime( 1900):     at android.os.Looper.loop(Looper.java:123) 
E/AndroidRuntime( 1900):     at android.app.ActivityThread.main(ActivityThread.java:3972) 
E/AndroidRuntime( 1900):     at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime( 1900):     at java.lang.reflect.Method.invoke(Method.java:521) 
E/AndroidRuntime( 1900):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
E/AndroidRuntime( 1900):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:543) 
E/AndroidRuntime( 1900):     at dalvik.system.NativeStart.main(Native Method) 
I/Process (  833): Sending signal. PID: 1900 SIG: 3

 

解决方式:减少布局嵌套层数,特别是用到类似tabHost,ViewPager的控件时,要考虑到最底层的 activity 的

contentView的布局,尽量简化,多用RelativeLayout替代LinearLayout

 

同样再优化列表滑动效率的时候,简化item布局也能带来巨大的体验提升

分享到:
评论

相关推荐

    如何解决java.lang.StackOverflowError

    在Java编程中,`java.lang.StackOverflowError` 是一个常见的运行时异常,它通常发生在程序执行过程中,当Java虚拟机(JVM)的调用栈溢出时。调用栈是每个线程用来存储方法调用信息的数据结构,当递归调用过深或者...

    tomcat内存溢出解决办法,错误信息:java.lang.OutOfMemoryError:PermGen space

    tomcat内存溢出解决办法,错误信息:java.lang.OutOfMemoryError:PermGen space 参考该文档可快速解决内存溢出的问题,服务器:tomcat

    java 异常种类总结【转】.docx

    java.lang.StackOverflowError 是一种堆栈溢出错误,指的是在程序中递归调用的层次太深而导致堆栈溢出时抛出的异常。 29. java.lang.ThreadDeath 线程结束 java.lang.ThreadDeath 是一种线程结束,指的是在程序中...

    解析Java中所有错误和异常的父类java.lang.Th

    在Java编程语言中,`java.lang.Throwable`是所有错误(Error)和异常(Exception)的顶级父类,它是Java异常处理机制的核心组成部分。这个类位于`java.lang`包中,是Java标准库的一部分,提供了处理运行时问题的标准...

    java异常类型.txt

    2. **`java.lang.StackOverflowError`** - 当程序递归过深导致栈溢出时抛出此错误。 3. **`java.lang.OutOfMemoryError`** - 当JVM无法分配更多内存时抛出此错误。 4. **`java.lang.InternalError`** - 表示JVM内部...

    java编程常见问题

    2. **java.lang.StackOverflowError**: 当递归调用过深导致堆栈溢出时,会抛出这个错误。这通常意味着一个函数或方法在调用自身时没有正确的退出条件。优化递归结构或提高JVM的堆栈大小可以避免这个问题。 3. **...

    java异常详解

    - **`java.lang.StackOverflowError`**:当栈溢出时抛出,通常由无限递归引起。 - **`java.lang.UnsupportedClassVersionError`**:当JVM版本不支持类文件版本时抛出。 - **`java.lang.VirtualMachineError`**:当...

    Java中Error与Exception的区别.doc

    java.lang.StackOverflowError java.lang.Exception java.io.IOException java.sql.SQLException java.sql.SQLSyntaxErrorException java.lang.RuntimeException java.lang.NullPointerException java.lang....

    常见java异常.txt

    - 描述:当程序中的递归调用过深,导致Java虚拟机的堆栈空间耗尽时,会抛出此类错误。 - 解决方法:优化递归算法,尽可能减少递归深度,或者增加虚拟机的堆栈大小配置。 通过理解和掌握这些常见异常,开发者可以...

    JsonConfigUtil

    去除死循环,解决StackOverflowError错误

    java内存机制及异常处理

    常见的内存错误包括`java.lang.OutOfMemoryError: Heap space`(堆空间不足)、`java.lang.OutOfMemoryError: PermGen space`(方法区空间不足)和`java.lang.StackOverflowError`(栈溢出)。这些错误通常由于物理...

    Java开发常见错误及解决方案文件

    - 错误信息:编译器报错提示无法初始化pagecontext,异常为java.lang.StackOverflowError。 - 原因分析:在接口Rollable中定义的成员变量ball的引用被改变了,但接口中的成员变量默认是public static final的,即...

    Java异常大全

    - **`java.lang.StackOverflowError`**:栈溢出时抛出。 - **`java.lang.UnsupportedClassVersionError`**:类版本不受支持时抛出。 ### 异常处理策略 针对以上提到的各种异常,合理的异常处理策略非常重要。以下...

    关于java堆内存溢出的几种情况

    【情况六】:`java.lang.StackOverflowError` 这是线程栈溢出错误,通常是由于方法调用层次过深或者无限递归。解决策略包括优化程序设计,减少不必要的方法调用,或者增大线程栈大小(通过`-Xss`参数)。 总结来说...

    稳定性专题 | StackOverFlowError 常见原因及解决方法

    如果某个线程的线程栈空间被耗尽,没有足够资源分配给新创建的栈帧,就会抛出 java.lang.StackOverflowError 错误。 线程栈是如何运行的? 首先给出一个简单的程序调用代码示例,如下所示: public class...

    无私奉献-jvm面试备战

    java.lang.StackOverflowError 异常的原因是 java 虚拟机栈内存溢出。解决方法是设置线程最大调用深度。参数是 -Xss。 10. java.lang.OutOfMemoryError 异常: java.lang.OutOfMemoryError 异常的原因是 java 堆...

    JAVA程序员最常遇见的10个异常

    当程序递归调用层次太深或方法栈空间不足时,会抛出`StackOverflowError`。这种异常通常与递归算法的设计有关,或者是由于方法内部无限循环导致的。为了避免这类异常,可以通过调整递归算法或减少不必要的嵌套调用来...

    JAVA常见异常BUG

    **定义**: `java.lang.StackOverflowError` 表示程序栈空间耗尽,通常是由于递归调用没有正确终止条件造成的。 **示例**: 下面的代码会导致栈溢出异常: ```java public static void main(String[] args) { main...

    Core java欢迎下载

    栈溢出会导致`java.lang.StackOverflowError`。 - **Program Counter Register**:每个线程都有一个程序计数器,用于记录当前线程正在执行的字节码指令的地址。 - **Native Method Stack**:与本地方法相关,当...

Global site tag (gtag.js) - Google Analytics