Android使用ListView时出现StackOverflowError 产生的原因和解决方法
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 昨天用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。 总结下,从实际的数据来看