最近做一个项目过程中发现一个问题,经常报StackOverflowError错误,查找资料后发现是因为布局嵌套层次太多。
因为项目UI比较复杂,我使用了ActivityGroup里面再嵌套TabHost,测试发现目前在其他手机上都没问题,只有在HTC手机某些型号上才会出现StackOverflowError的错误。我将布局精简后就可以在HTC机器上使用了。
难道java或者android中有对布局层级的限制吗?或者对栈空间(不是堆空间)的大小限制?
因为项目UI比较复杂,我使用了ActivityGroup里面再嵌套TabHost,测试发现目前在其他手机上都没问题,只有在HTC手机某些型号上才会出现StackOverflowError的错误。我将布局精简后就可以在HTC机器上使用了。
难道java或者android中有对布局层级的限制吗?或者对栈空间(不是堆空间)的大小限制?
太多的话根本画的很卡的。
建议你看这篇文章。
http://wiki.eoeandroid.com/Optimizing_Layout_Hierarchies
这个10是怎么定义出来的呢?是统计的结果,还是Android本来就可以配置?现在在不同手机上嵌套最大层次还是不同的。另外,Android框架还会自动在布局上添加一些层级的
现在我使用的布局是ActivityGroup里面嵌套TabHost,TabHost里面再放具体的Activity。因为这三个东西添加的时候系统会自动添加PhoneWindow$DecorView——FrameLayout(id/content)——FrameLayout这三层,所以这时候我什么布局都不写就已经有3*3=9层布局了。再随便添加一些自定义的布局,随随便便就十六七层了。远远超过了要求的10层。
而且即使是十几层在一般手机上显示也都没有问题,就是有些手机不太支持
2^20 = 1M字节
2^30 = 1G字节嵌套30层的话,就算每次函数调用只需要一个字节,也最起码总共需要1G字节的栈。所以不能嵌套太多的层。
Android的界面配置太方便灵活了,以至于容易忽略嵌套的层数。