使用自定义字体动画TextView会导致字体缓存繁重

时间:2011-06-20 15:52:00

标签: android

我有一个TextView我注册了以下动画:

mScaleAnimation = new ScaleAnimation(1f, 1.2f, 1f, 1.2f,
            mReferenceTextView.getWidth() / 2, mReferenceTextView
                    .getHeight() / 2);
    mScaleAnimation.setRepeatCount(Animation.INFINITE);
    mScaleAnimation.setRepeatMode(Animation.REVERSE);
    mScaleAnimation.setDuration(500);

它工作正常,看起来非常酷:)

我唯一关心的问题如下:当我看到logcat时,它完全无法使用,因为只要动画正在运行,我就会一次又一次地重复这些日志:(

06-20 17:50:05.555: DEBUG/skia(14179): purging 213K from font cache [7 entries]
06-20 17:50:05.750: DEBUG/skia(14179): purging 196K from font cache [7 entries]
06-20 17:50:05.870: DEBUG/skia(14179): purging 202K from font cache [8 entries]
06-20 17:50:05.995: DEBUG/skia(14179): purging 190K from font cache [8 entries]

TextView使用自定义字体/字体(采用otf格式)。

是什么原因导致字体缓存繁重?

2 个答案:

答案 0 :(得分:1)

我相信你的缓存会被杀死,因为你正在生成大量的TypeFace对象。 我猜这是在ICS上发布的吗? 有bug持有TypeFaces并且没有正确释放它。 因此,当您制作动画时,它会不断为每个位置创建新对象,并且它们会被泄露并且永远不会被清除。

我发现有人建议使用HashMap创建TypeFace缓存。您可以查看此帖子了解更多详情。 Custom fonts and XML layouts (Android)

答案 1 :(得分:0)

如果您不断更改实际字体大小,Skia和HWUI都将不断重新光栅化并重新播放大小合适的新字形。内存使用量可以快速增长,性能急剧下降。如果你只是缩放画布,你不应该得到这个问题,但是你也不会得到质量。