如何在Android上加速文本测量?

如何在Android上加速文本测量?,android,performance,fontmetrics,skia,Android,Performance,Fontmetrics,Skia,我正在编写一个具有自定义文本布局引擎的应用程序,为此,我必须在Paint类上使用.getTextBounds()方法测量大量(数千)字符串 它确实有效。但在某些设备上,这种测量速度非常慢 例如,测量10000个5-6个字符的长单词 三星Galaxy S2手机(或三星Galaxy系列的任何其他设备):1.5秒 HTC Desire高清:约90秒 华硕变压器TF300:~30秒 等等 我已经完成了方法分析,我所能看到的是,在某些设备上,测量方法的本机Skia实现需要更长的时间 在测量过程中,我没

我正在编写一个具有自定义文本布局引擎的应用程序,为此,我必须在Paint类上使用.getTextBounds()方法测量大量(数千)字符串

它确实有效。但在某些设备上,这种测量速度非常慢

例如,测量10000个5-6个字符的长单词

  • 三星Galaxy S2手机(或三星Galaxy系列的任何其他设备):1.5秒
  • HTC Desire高清:约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);
}
油漆=新油漆();
Rect bounds=new Rect();
油漆。setTextSize(22.0f);
for(int i=0;i
在测量文本尺寸时,有什么需要注意的吗?
制造商是否在ROM中搞砸了与字体缓存实现相关的事情?有什么我可以做的吗?

为什么要测量它们呢?对于我们的电子书渲染引擎。如果你正在显示一个句子,并且你想知道它何时超过屏幕宽度,那么你可以使用
Paing.breakText()
。它将返回可以在一行中显示的字符。如果要将单词附加在一起,则可能需要使用StringBuilder,附加单词并测量整个句子。如果您正在显示行,我认为您不需要文本的高度,(使用
Paint.measureText()
)只需将每行
textSize
显示在另一行下方即可。如果你不使用固定宽度的字体,那么我想这是最快的方法