以最佳性能加载 android 中的资源
Loading resources in android with best performance
有时我会做一些小测试来了解在 Android 中什么会降低性能。
今日代码:
final long start = System.currentTimeMillis();
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 10000; i++) {
String s = getString(R.string.t1) + " " + getString(R.string.t2) + " " + getString(R.string.t3);
String s = String.format(getString(R.string.str_format), getString(R.string.t4));
}
Log.d(TAG, "onCreate " + "diff: " + (System.currentTimeMillis() - start) + " ms");
}
}).run();
我使用的资源:
<string name="t1">Hello</string>
<string name="t2">little</string>
<string name="t3">bird</string>
<string name="str_format">Hello %1$s</string>
<string name="t4">little bird</string>
Logcat 说(10k 次迭代):
- 运行(每个字符串单独链接):~270ms
- 运行(使用String.format):~200ms
所以在这个例子中,使用 String.format() 的速度提高了 30-40%。
我的问题:这是加载字符串资源的最佳方式还是还有其他机会?
我认为你所做的是唯一的方法。如果您只是出于个人兴趣这样做,使用 arrays.xml 或复数形式的字符串时可能会有更多差异。
还有一个内置的字符串格式 getString(R.string.str_format, getString(R.string.t4))
我不知道这与 String.format
相比如何
有时我会做一些小测试来了解在 Android 中什么会降低性能。
今日代码:
final long start = System.currentTimeMillis();
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 10000; i++) {
String s = getString(R.string.t1) + " " + getString(R.string.t2) + " " + getString(R.string.t3);
String s = String.format(getString(R.string.str_format), getString(R.string.t4));
}
Log.d(TAG, "onCreate " + "diff: " + (System.currentTimeMillis() - start) + " ms");
}
}).run();
我使用的资源:
<string name="t1">Hello</string>
<string name="t2">little</string>
<string name="t3">bird</string>
<string name="str_format">Hello %1$s</string>
<string name="t4">little bird</string>
Logcat 说(10k 次迭代):
- 运行(每个字符串单独链接):~270ms
- 运行(使用String.format):~200ms
所以在这个例子中,使用 String.format() 的速度提高了 30-40%。
我的问题:这是加载字符串资源的最佳方式还是还有其他机会?
我认为你所做的是唯一的方法。如果您只是出于个人兴趣这样做,使用 arrays.xml 或复数形式的字符串时可能会有更多差异。
还有一个内置的字符串格式 getString(R.string.str_format, getString(R.string.t4))
我不知道这与 String.format