Android 4中的“computeValuesWithHarfbuzz – 需要强制单次运行”:这是什么意思?

我的Android 4应用通过将多个textviews添加到一个linearlayout 。 这适用于我所有的列表项目,除了一个。 问题是,在添加第一个textview之后, textviews列表会中止,但不会抛出exception!

我只是在我的LogCat中看到这个警告:

TextLayoutCache | computeValuesWithHarfbuzz – 需要强制单次运行

有谁知道这是什么意思?

Solutions Collecting From Web of "Android 4中的“computeValuesWithHarfbuzz – 需要强制单次运行”:这是什么意思?"

HarfBuzz是OpenType字体的布局/整形引擎。 其目的是为了标准化开源项目中的文本布局。 那个警告,可以追溯到android / graphics / TextLayoutCache.cpp 。

相关的代码块是:

 ubidi_setPara(bidi, chars, contextCount, bidiReq, NULL, &status); //runs the algorithm int paraDir = ubidi_getParaLevel(bidi) & kDirection_Mask; // 0 if ltr, 1 if rtl if (U_SUCCESS(status) && rc == 1) { // Normal case: one run, status is ok isRTL = (paraDir == 1); useSingleRun = true; } else if (!U_SUCCESS(status) || rc < 1) { LOGW("computeValuesWithHarfbuzz -- need to force to single run"); isRTL = (paraDir == 1); useSingleRun = true; } else {...} 

这部分代码是BiDialgorithm(uBiDi)的一部分,代表Unicode双向,如此处所述 。

阿拉伯语,希伯来语或其他RTL语言的数据需要处理双向文本。 由于这些从右到左的脚本使用从左到右书写的数字,文本实际上是双向的:从右到左和从左到右的文本的混合。

上面的rc是algorithm的计数 。 每个unicode字符都被分配一个级别。 (即使是未分配的)

文本首先被分成不同的层次,(0级是纯英文文本,1级是普通的阿拉伯文文本,可能embedded英文0级文本内)

运行现在按以下方式进行。

  Levels: 0 0 0 1 1 1 2 Runs: <--- 1 ---> <--- 2 ---> <3> 

在上面的例子中运行计数是3.如果BiDialgorithm一次都不能运行,则会引发警告。 有很多错误可能发生,阻碍了algorithm的成功运行。 其中任何一个都可能触发警告。

但是,不pipe是否发生警告,代码行为除了logging的警告之外完全相同。 所以,不应该影响应用程序的运行。