【问题标题】:memory not reclaimed after removing cardview on swipe刷卡时删除 cardview 后内存未回收
【发布时间】:2016-08-25 00:21:14
【问题描述】:

我正在使用 itemTouchHelper 在滑动时从 RecyclerView 中删除 cardView 我的卡片视图很简单,它只有一个文本和一个图像 但是当我刷卡以取出卡时,它消失了,但从未被内存占用(我这么说是因为图像的内存永远不会消失,它会导致内存不足异常) 我的代码非常简单,所以我想知道是否有一个步骤我搞砸了,它告诉回收器视图从内存中删除? 我的代码和this一一模一样

【问题讨论】:

    标签: android performance memory-management memory-leaks android-recyclerview


    【解决方案1】:

    通常,图像会加载到 android 内存中,根据设备屏幕分辨率要求进行缩放,并一直保存到进程终止或被杀死或被垃圾收集器收集。

    可能是您的卡片视图(或res文件夹中的其他图像)中的图像尺寸过大,并且通过android缩放后的图像占用过多的内存,导致内存异常。尝试缩小图像大小(尝试将大小与google icons 的图标大小进行比较,它们都小于 1 Kb,太棒了!)。

    如果上述方法不起作用,则在您的res 文件夹中创建一个drawable-nodpi 文件夹并将大尺寸图像放入该文件夹,这将表明android 不会缩放这些图像并按原样渲染。 (请确保在遵循此方法后在所有屏幕设备上进行测试,因为现在图像不会在不同的屏幕尺寸下缩放)。

    最后,如果以上都没有帮助,请在用户执行刷卡操作后尝试运行:System.gc()。这将运行垃圾收集器,并且您的图像将从内存中删除。 (这种方法并不能保证垃圾收集器在所有设备上都能正常工作,所以请确保您尝试上述两种方法,它们应该可以工作)。

    希望这会有所帮助!

    【讨论】:

    • 谢谢!,我实际上是在使用毕加索来缩小图像,这样它们就不会占用太多空间,但是当我查看已用内存的监视器时,我注意到的是,当我从回收的视图中删除图像内存不会下降,当我添加另一个元素时,内存只会不断增加(好像删除的图像从未被回收),除了我弄乱了一些东西之外,我无法以任何其他方式解释这种行为我应该从内存中删除它的步骤
    • 毕加索有内存占用,查看这里:http://stackoverflow.com/questions/31925461/picasso-out-of-memory
    猜你喜欢
    • 2021-01-15
    • 2014-09-27
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多