我正在编写一个具有自定义文本布局引擎的应用程序,为此我必须使用 Paint 类上的 .getTextBounds() 方法测量大量(数千个)字符串。
它确实有效。但在某些设备上,这种测量非常缓慢。
例如,测量 10,000 个 5-6 字符长的单词
- 三星 Galaxy S2 手机(或三星 Galaxy 系列的任何其他类型的设备):1.5 秒
- HTC Desire HD:约 90 秒。
- 华硕变压器 TF300:~30 秒
- 等等。
我已经完成了方法分析,我可以看到,在某些设备上,测量方法的本机 Skia 实现需要更长的时间。
在测量过程中我没有做任何花哨的事情,我的代码看起来像这样:
Paint paint = new Paint();
Rect bounds = new Rect();
paint.setTextSize(22.0f);
for (int i = 0; i < input.length; i++) {
paint.getTextBounds(input[i], 0, input[i].length(), bounds);
}
测量文本尺寸时有什么需要注意的吗?制造商是否搞砸了与 ROM 中的字体缓存实现相关的内容?对此我能做些什么吗?