【问题标题】:Tag: TextLayoutCache Text: Cache Value deleted标签:TextLayoutCache 文本:缓存值已删除
【发布时间】:2013-07-03 13:50:50
【问题描述】:

在某些时候调试我的 Android 应用程序时,我在 LogCat 中看到大量条目,其中

Tag: TextLayoutCache Text: Cache Value 0x51b9f578 deleted, size=168 (the hexa value changes from entry to entry)

有人知道这是怎么回事吗?内存泄漏?如果有问题,有什么想法可以解决吗? 谢谢!

【问题讨论】:

    标签: android android-layout textview


    【解决方案1】:

    网上似乎没有明确的答案,所以我查看了TextLayoutCache.cpp 的代码。在我看来很好。它正在缓存文本布局数据以提高性能,目前在TextLayoutCache.h 中定义了一个固定的默认缓存大小为 0.5MB。

    因此,如果您将布局文本更改为一组固定值 (

    如果您将文本更改为动态值,那么最终缓存将填满并删除 LRU(最近最少使用)缓存条目,您将看到日志消息。这只是一条调试消息,不是错误,也不是泄漏。这是关于 Android 内部如何处理我们的应用程序的有用性能指标。

    请注意,Android 版本 >= 5 中不使用 TextLayoutCache。

    【讨论】:

      【解决方案2】:

      当我使用 runnable & 从处理程序更新我的 textView 值时遇到了同样的问题

      我通过 findViewById() 将 textViews 的实例收集到变量中,然后通过引用这些收集的实例来更新 textview 的值。

      因此,正如我所观察到的,我不需要处理程序之外的那个 textview 的实例,所以我只是在处理程序内部使用 findViewById() 并更新了我的 textviews。

      在您需要 id 的上下文中写下您的 findviewById()。(在我的情况下,谈论使用它的函数的括号内。)

      希望这会有所帮助...

      【讨论】:

      • 谢谢,我会试试的,但无论如何,尽管它有效,但我一直不理解错误,它是如何/何时/什么被缓存的。顺便说一句,我检查并在多个地方使用了引用,所以我不想每次在类中使用方法时都调用 findbyid,而不是只有一个引用并使用它。
      • 正如我提到的,我在从连续运行的线程更新 textView 时遇到了这个问题。如果您不调用 findViewById,它会将这些行添加到您的 logcat 中。它与内存泄漏无关,我已经用它发生的原因回答了这个问题(就我而言)。
      • 好的,我试过知道,但一直这么说,可能是另一个问题。无论如何,谢谢!
      猜你喜欢
      • 1970-01-01
      • 2016-04-16
      • 1970-01-01
      • 2021-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多