android - 处理多值方法返回的最有效方法是什么?

标签 android performance

我有一个返回 Point 的方法:

private Point getDisplayWH() {

    Display display = this.getWindowManager().getDefaultDisplay();

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
        Point realWH = new Point();
        display.getSize(realWH);
        return realWH;
    }
    return new Point(display.getWidth(), display.getHeight());
}

现在,当收到这个结果时,我无法决定这两个哪个更有效率。

1 号:

Point displayWH = getDisplayWH();
layoutPreviewDim = calcCamPrevDimensions(displayWH.x, displayWH.y));

2 号:

layoutPreviewDim = calcCamPrevDimensions(getDisplayWH().x, getDisplayWH().y));

this article据说:

If you have a method returning a string, and you know that its result will always be appended to a StringBuffer anyway, change your signature and implementation so that the function does the append directly, instead of creating a short-lived temporary object.

但即使我必须多次调用该方法才能获得返回,我是否应该遵循这些说明?我的 getDisplayWH() 方法中的 display 变量怎么样?它是否比直接访问 Display 方法更有效 this.getWindowManager().getDefaultDisplay().xxxx

我的第二个问题:除了方法调用前后的系统时间差之外,是否有通用的方法来检查/比较代码效率?还是时差才是终极工具?

最佳答案

两次调用一个方法而不是存储返回值将是低效的。

测试效率的一种方法是编写单元测试,也许使用这两种方法,在循环中调用它们 10k 次,然后看看会发生什么。

但是,无论如何,尽量减少多次调用方法,如果它们在每次调用时返回相同的值。

关于字符串的要点是字符串必须被垃圾收集,因为它们没有附加到。因此,您创建了需要收集的额外对象。因此,将它直接附加到 StringBuffer 只是为了限制垃圾收集器运行的时间。

如果您采用单元测试方法,您还可以监控垃圾回收以查看有何不同。

监视垃圾收集的一种方法是遵循这篇文章: http://www.raizlabs.com/dev/2014/04/hunting-your-leaks-memory-management-in-android-part-2-of-2/

一种方法是使用 DDMS 并引发垃圾回收以查看分配了多少内存,但还有其他方法。

关于android - 处理多值方法返回的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27465132/

相关文章:

android - android的屏幕分辨率

iOS 操作扩展加载时间慢

sql - 如何提高数据库的性能?

sql-server - SSIS:一个数据流中的多个数据流还是......?

java - 到处使用 `final` 修饰符的开源 Java 项目

android - Activity 开始时 ViewPager 不加载 fragment 内部

android - Google Play 应用签名 key 哈希

Android - 来自 GCM 的设备 ID 返回空

performance - NHibernate select指数增长缓慢

java - 将字符串变量从 java 传递到 php 函数