我被告知Android OS将所有函数调用存储在堆栈中。这可能会导致许多问题,并在运行时导致“打嗝”,即使程序功能正常,是否正确?
所以问题是,我们如何防止这种情况发生?显而易见的解决方案是减少功能化,以及其他明智的行为,例如避免过度/不必要地创建对象,对不访问字段的函数执行静态调用等等。
还有另一种方法吗?或者这只能通过在程序员身上仔细编写代码来完成吗? JVM / JIT是否在编译期间自动优化字节码以解决这个问题?
非常感谢您的回复!!
答案 0 :(得分:3)
我被告知Android OS存储 堆栈中的所有函数调用
这就是所有编程语言的工作方式,30年或40年就是如此。
这可能会导致很多问题 在运行时导致'打嗝', 即使程序功能化 这是正确的吗?
不,但如果你的堆栈空间不足,可能会导致异常。
所以问题是,我们如何防止 这发生了什么?
如何阻止发生什么?
耗尽堆栈空间的第一个罪魁祸首是视图层次结构太深。使用hierarchyviewer
检查您的活动,并计算视图层次结构中从PhoneWindow$DecorView
到最远的叶节点的层数。如果你到了15左右,你可能会耗尽堆栈空间。在这种情况下,请简化您的用户界面,例如将嵌套的LinearLayouts
替换为RelativeLayout
。