以前曾经问过部分内容,但我还没有找到可靠证据和/或决定性答案的方法。
在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);
在片段中,模式在几个地方被检查,因此我关注三个选项中的哪一个更有效地存储在包中,并且在另一端更有效地进行比较。
非常感谢任何建议,意见或经验!
答案 0 :(得分:5)
好的,所以我在网上做了一些研究,发现信息含糊不清,不可靠或矛盾 - 总之,我没有找到答案。所以相反,我设置了一个小应用程序来实际测试这个。
应用程序将捆绑包中的200个项目从一个活动传递到另一个活动,然后使用这些值进行比较和查找数组和地图。然后又重复了9,999次。
对于这个过程的10k转,对于这三种方法中的每一种都运行了几次,我得出了一个结论:
选择哪一个并不重要。
性能差异很小,我的意思是 miniscule 。弦乐队以微弱的优势失去了大部分的比赛,但是整体和队友都是顶级的竞争者,无论如何有时弦乐都击败了他们。
内存消耗的差异也很小。只要您的字符串值不是文本的段落,这些差异实际上太小而无法关注。我们说的是增加了几个百分点。
<强>要点:强>
当然,如果您的应用程序始终传递数千个Bundle值*,那么可能值得使用整数或枚举(以您的代码库最自然的方式)进行优化。但除此之外,你获得的任何增加都不值得创造它所需的努力。
*如果您这样做,您可能已经知道这一点,或者您的应用基础架构出现了问题!