我创建了一个只在一个地方调用的方法 - 从 RecyclerView 中的 onBindViewHolder()
。它是一个逻辑代码单元,我认为将该代码块提取到一个方法中可以提高可读性。但是,在代码审查期间,我被告知方法调用的开销很大,因此会对性能产生负面影响,我应该内联代码而不是将其放在单独的方法中。
我认为 JVM 或编译器会通过内联方法来优化此代码,但我不确定在 Android 上是否如此。我还没有真正找到任何关于新 ART JVM 进行何种优化的具体信息。
在 Android 上调用一个方法是否非常昂贵,以至于我应该在可能多次调用该方法的地方以可读性为代价避免它?此外,由于 DEX 方法的限制,创建这样的一次性方法是否令人不悦? (此应用已在使用 multidex)。
这个问题不是其他类似 java 问题的重复,因为我专门询问 Android 上的性能,它有自己的特性。
最佳答案
我完全不同意。理论上,方法调用确实会增加一些开销。必须将事物压入堆栈,然后跳转到该方法。但开销微不足道。
过早的优化从来都不是一个好主意。对您的应用程序进行基准测试并找出真正的性能问题所在。我敢肯定,这不会是因为单个方法调用,即使是被频繁调用的方法。该方法如何实现可能是个问题,但不是调用本身。
关于java - 在 Android 上调用方法的成本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36751914/