【发布时间】:2013-04-02 13:40:50
【问题描述】:
我的问题是在整个 Android API 中,很多库调用都要求将 results[] 参数传递给方法,例如:
public boolean isInProximity(double startLat, double startLongitude, float meters) {
float[] results = new float[3];
Location.distanceBetween(startLat, startLongitude, endLatitude, endLongitude, results);
return results[0] <= meters;
}
对 android 的调用是 Location.distanceBetween(),它需要 results[] 为什么他们不只是在方法中包含一个返回签名?我假设这是某种内存或速度优化。我不确定其背后的确切原因。
【问题讨论】:
-
可能让您灵活地将同一个对象(在本例中为数组)传递给方法的许多调用,从而避免每次调用都需要分配内存。
-
所以我认为我做错了
private float[] results = new float[3];@RobI -
不一定。如果您不希望经常调用该方法(例如,仅在用户单击按钮时调用),则不太可能产生影响。如果您的代码调用它数百万次,您可以考虑将该数组作为字段来减少分配。
-
@Rob 我看不出在这种情况下你需要在哪里分配内存,尤其是在寄存器大小的变量的情况下。曾经发明的每一个调用约定(好吧,也许你可以找到一个没有的)都会将这样的返回值放入寄存器(我认为在 ARM 的情况下为 r0、s0 或 d0)。即使在更大的值的情况下,它仍然会被分配到堆栈上,这几乎是尽可能便宜的。
-
@Voo 我们谈论的是
Location.distanceBetween()调用的结果,它是一到三个浮点数。上面这个方法是提问者写的。
标签: java android performance optimization