【问题标题】:Android how to trace memory leak?Android如何追踪内存泄漏?
【发布时间】:2012-12-21 00:10:26
【问题描述】:

我有一个类似于 Pulse 的应用程序,它处于测试阶段 https://play.google.com/store/apps/details?id=com.braindigit.nepal.khabar

我有一个主布局,其中包含一个名为NewsCategoryHolderLinearLayout,在此布局上我动态添加和删除另一个布局名称CategoryView。这个CategoryView 包含HorizontalListView 和其他views。 对于导航,我已经实现了ActionbarSherlock Tab,每次单击选项卡NewsCategoryHolder 将删除其所有视图,然后添加CategoryView。 每个CategoryView 都有自己的AsyncTask,用于从服务器或数据库加载数据。 在每次添加和删除CategoryView 时,我都删除了它的所有视图,将它的适配器分配给null,甚至将它持有的Context 分配给null。但是当我从Tab 导航到Tab 时,应用程序的内存会增加。我觉得这是我的应用程序发生一些内存泄漏的情况。 我已经阅读了有关MAT 和其他分析器的所有教程、链接和视频,但我无法指出应用程序消耗内存的确切部分或GC 无法收集对象引用的点.

我只是想找到内存消耗高的位置,但无法做到。我已附加 *.hprof http://news.braindigit.com/saved/android3201806337409456011.hprof 文件,只是想对其分析有所帮助,我的应用程序包名称是com.braindigit.nepal.khabar

【问题讨论】:

  • 删除不同的类、视图等后,我发现我的问题类似于link,我不知道这是什么原因

标签: android memory allocation mat


【解决方案1】:

我找到了内存消耗高的主要原因。而不是从MAT,从布局和各种语句中删除各种视图后,我发现我使用的是asset文件夹中的字体,这是罪魁祸首.

headingText.setTypeface(Typeface.createFromAsset(context.getAssets(), DataHolder.FONT_PATH));

因此,通过这样做,Context 可能被引用或 TypeFace 被引用并且从未被 garbage collected 引用。但是删除这行代码修复了我的应用程序上的所有内存泄漏问题。

可以使用此处描述的技术进一步解决此问题 Typeface memory leak

【讨论】:

    猜你喜欢
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 2017-05-11
    相关资源
    最近更新 更多