Android性能:Strings vs. Enums vs. Static Final Ints

时间:2014-07-29 18:45:53

标签: java android performance enums

以前曾经问过部分内容,但我还没有找到可靠证据和/或决定性答案的方法。

在Bundle中围绕Android传递信息时,可以通过使用字符串枚举静态最终整数来观察到(如果有的话)性能增加/减少

为了举例说明一个用例,我的应用程序中有几次加载并显示某个片段。每次加载片段时,Bundle都会传递给它,其中包含两个参数:显示数据的ID,以及指示如何显示它的模式。我有一个自定义的状态寻呼机适配器设置完成所有的提升,但问题的关键在于:哪些(如果有的话)将提供任何性能增益/损失:

Bundle args = new Bundle();
args.putInt("ID", 1);

// method 1
args.putString("MODE", "Mode1");

// method 2
args.putSerializable("MODE", ModeEnum.Mode1);

// method 3
public static final int MODE_1 = 1; // this would be elsewhere in a constants class
args.putInt("MODE", MODE_1);

在片段中,模式在几个地方被检查,因此我关注三个选项中的哪一个更有效地存储在包中,并且在另一端更有效地进行比较。

非常感谢任何建议,意见或经验!

1 个答案:

答案 0 :(得分:5)

好的,所以我在网上做了一些研究,发现信息含糊不清,不可靠或矛盾 - 总之,我没有找到答案。所以相反,我设置了一个小应用程序来实际测试这个。

应用程序将捆绑包中的200个项目从一个活动传递到另一个活动,然后使用这些值进行比较和查找数组和地图。然后又重复了9,999次。

对于这个过程的10k转,对于这三种方法中的每一种都运行了几次,我得出了一个结论:

  

选择哪一个并不重要。

性能差异很小,我的意思是 miniscule 。弦乐队以微弱的优势失去了大部分的比赛,但是整体和队友都是顶级的竞争者,无论如何有时弦乐都击败了他们。

内存消耗的差异也很小。只要您的字符串值不是文本的段落,这些差异实际上太小而无法关注。我们说的是增加了几个百分点。

<强>要点:

当然,如果您的应用程序始终传递数千个Bundle值*,那么可能值得使用整数或枚举(以您的代码库最自然的方式)进行优化。但除此之外,你获得的任何增加都不值得创造它所需的努力。

*如果您这样做,您可能已经知道这一点,或者您的应用基础架构出现了问题!