文档章节

Android使用ListView时出现StackOverflowError 产生的原因和解决方法

chengli3209
 chengli3209
发布于 2014/02/12 10:16
字数 420
阅读 3262
收藏 1

昨天用ListView写的一个类似微博动态页面,在Android4.4上运行良好,在一款2.3系统的手机上运行崩溃,看log是java.lang.StackOverflowError(堆栈溢出)。

Android SDK 场景描述为:由于栈调用的层次太多,超过了虚拟器dalvik的最大限制(作为一个虚拟器参数,可定制)导致的。当程序编写错误导致无限递归调用时会触发,此外程序正确但是递归调用的层次过深也会触发。

Google后发现在ListView中造成这种情况的原因是布局嵌套太多造成的,所以我就看我的ListView Item 布局,去掉一、两层后发现还是崩溃,最后就写一个控件,还是崩溃,这样之后我就觉得应该不是ListView中Item的问题,然后我就看ListView所在页面的布局,其父布局为LinearLayout线性布局嵌套,然后果断去掉一层父布局,结果ok。

最后提醒下开发人员,解决嵌套过深的基本思路是在实现同样的效果的前提下减少界面的layout深度。具体的方法有:

    1) 多用RelativeLayout的各种布局属性来完成布局,而避免过多使用嵌套layout来实现。

    2)  占位或填充剩余空间的元素多用View,避免使用layout等viewGroup。

总结下,从实际的数据来看,设计中layout嵌套深度超过10层,就应该考虑下优化了,否则就会出现java.lang.StackOverflowError的crash了。



© 著作权归作者所有

chengli3209
粉丝 0
博文 1
码字总数 420
作品 0
浦东
程序员
私信 提问
解决ListView拖动时背景黑色的问题

我们知道在Android中ListView是一个比较常用的UI控件,我们在大部分开发中都需要用到它,因此Android为我们提供了ListView的多种实现方法,通过自定义显示布局让显示的内容更加美观,但是我们...

无鸯
2011/09/06
571
0
踢开Android 开发中的绊脚石

在开发过程中,许多并算不上高级技能甚至连基础知识都不算的东西经常被忽略,但这些东西还经常是开发过程中的绊脚石,很长时间都解决不了,一旦找到了解决办法,就茅塞顿开了“原来是这样啊,...

Xiao_Mai
2017/10/24
0
0
android和java中常见 Exception

1, 常见的nullpointerexception,在调式程序中最常见是空指针异常了,这个是一般是对象实例化为null, 比如在组件的实例化和class对象实例化的时候, 声明 TextView mTestTV; 没有findViewByI...

dominic69
2015/03/19
0
0
android-listview拖动时背景变黑的问题

Android为我们提供了ListView 的多种实现方法,通过自定义显示布局让显示的内容更加美观,但是我们会发现这样一个问题,当我们操作ListView的时候,如果不使用手机上下按键的时候,直接用触摸...

长平狐
2012/08/28
119
0
Android 如何置底一个View(附 前置声明layout布局文件中的资源ID)

文章出处:http://billhoo.blog.51cto.com/2337751/764788 PS:初学Android,很多术语可能不甚严谨,希望大家积极指出,bill才好及时改正,以免误人子弟。 今天在考虑一个RelativeLayout布局...

鉴客
2012/01/29
2.3K
0

没有更多内容

加载失败,请刷新页面

加载更多

利用mybatis generator生成实体类、Mapper接口以及对应的XML文件

项目中通常会遇到数据的持久化,如果是采用mybatis的orm,就会涉及到生成xml的问题,刚好mybatis官网提供了这么个插件MyBatis Generator,效果简直是棒呆。 1. 首先需要在build.gradle文件中...

啊哈关关
今天
2
0
SpringSocial相关的知识点

使用SprigSocial开发第三方登录 核心类 ServiceProvider(AbstractOauth2ServiceProvider):主要负责实现server提供商(例如QQ,微信等共有的东西),默认实现类是AbstractOauth2ServiceProvider...

chendom
今天
2
0
Java并发之AQS详解

一、概述   谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)!   类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源...

群星纪元
昨天
2
0
Fabric-sdk-java最新教程

Fabric Java SDK是Fabric区块链官方提供的用于Java应用开发的SDK,全称为Fabric-sdk-java,网上可用资料不多,本文列出了精心整理的针对Fabric Java SDK的最新精选教程。 如果希望快速掌握F...

汇智网教程
昨天
3
0
react 子组件监听props 变化

componentWillReceiveProps //已经被废弃 getDerivedStateFromProps// 推荐使用//如果条件不存在必须要返回null static getDerivedStateFromProps(props, current_stat...

一箭落旄头
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部