2

有人告诉我,Android 操作系统将所有函数调用存储在一个堆栈中。即使程序功能正确,这也可能导致许多问题并在运行时导致“打嗝”,对吗?

那么问题来了,我们怎样才能防止这种情况发生呢?显而易见的解决方案是减少功能化,以及其他明智的行为,例如避免过度/不必要地创建对象,对不访问字段的函数执行静态调用等......

还有其他方法吗?或者这只能通过程序员仔细编写代码来完成?JVM/JIT 是否会在编译时自动优化字节码来解决这个问题?

非常感谢您的回复!!

4

1 回答 1

3

有人告诉我,Android 操作系统将所有函数调用存储在一个堆栈中

这几乎是所有编程语言的工作方式,并且这种情况已经持续了 30 或 40 年。

即使程序功能正确,这也可能导致许多问题并在运行时导致“打嗝”,对吗?

不,但如果堆栈空间不足,可能会导致异常。

那么问题来了,我们怎样才能防止这种情况发生呢?

你怎么能防止事情发生?

堆栈空间不足的第一大罪魁祸首是视图层次结构太深。用于hierarchyviewer检查您的活动,并计算视图层次结构中有多少级别,从PhoneWindow$DecorView最远的叶节点到最远的叶节点。如果达到 15 左右,您可能会用完堆栈空间。在这种情况下,请简化您的 UI,例如将嵌套替换LinearLayoutsRelativeLayout.

于 2010-05-28T20:34:59.980 回答