`

Android开发中StackOverflowError错误实例分析

阅读更多
1.在开发UI界面进行了按钮按下实现背景图变化效果,引入自定义drawable/test.xml文件时出现问题;根据提示知道是栈越界的错误,网上搜索资料,了解到复杂layout嵌套过多会导致此问题,据资料解释:
       android SDK中对该错误的出现的场景描述为:由于栈调用的层次太多,超过了虚拟器dalvik的最大限制(作为一个虚拟器参数,可定制)导致的。当程序编写错误导致无限递归调用时会触发,此外程序正确但是递归调用的层次过深也会触发。
       经过测试我在单独程序中运行时没有问题,说明不是使用方法的错误,也说明不存在死循环的无限递归错误。观察该界面的集成情况,该界面在设计时,用了多次LinearLayout进行嵌套,而因为该界面复杂,原因定位为界面嵌套层次过深。
  2.解决:
         解决嵌套过深的基本思路是在实现同样的效果的前提下减少界面的layout深度。资料说明减少layout嵌套深度可以解决,具体的方法有:
1)       多用RelativeLayout的各种布局属性来完成布局,而避免过多使用嵌套layout来实现。
2)       占位或填充剩余空间的元素多用View,避免使用layout等viewGroup。

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

相关推荐

Global site tag (gtag.js) - Google Analytics