カスタム テキスト レイアウト エンジンを備えたアプリケーションを作成しています。これを機能させるには、Paint クラスの .getTextBounds() メソッドを使用して、大量 (数千) の文字列を測定する必要があります。
それは機能します。ただし、一部のデバイスでは、この測定は非常に遅くなります。
たとえば、5 ~ 6 文字の長さの単語を 10,000 個測定すると、
- Samsung Galaxy S2 携帯電話 (または Samsung Galaxy シリーズのその他の種類のデバイス): 1.5 秒
- HTC Desire HD: ~90 秒。
- Asus Transformer 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 のフォント キャッシュの実装に関連する何かを台無しにしましたか? これについて何かできることはありますか?