【问题标题】:How to empty or clear heap memory dynamically如何动态清空或清除堆内存
【发布时间】:2012-04-28 11:27:27
【问题描述】:

我的项目完全基于图像。我在我的项目中使用了画廊和封面流,由于堆大小较小,应用程序被强制关闭。

所以每次我加载我的应用程序时,我都想清除堆大小,以便我可以重复使用它。
我在gallery和coverflow中使用了System.gc() & recycle ()方法,但是我的gallery和coverflow是相互关联的,所以对象总是被引用,所以System.gc()recycle()没有效果,我的gallery和coverflow仍然崩溃使用时的随机时间点。

由于某种原因,我无法在此处显示我的代码,即使它非常大,所以我无法在此处显示。

请帮助我并感谢您阅读此问题。

【问题讨论】:

    标签: android heap-memory forceclose


    【解决方案1】:

    好吧,您无法真正控制强制 GC 运行。只要它认为是时候,它就会自行运行。

    When does System.gc() do anything

    因此,您唯一的选择就是明智地使用图像和位图。

    提示 => 使用软引用。 http://developer.android.com/reference/java/lang/ref/SoftReference.html

    【讨论】:

    • 如何在画廊和封面流中使用它
    • 您将不得不搜索工作样本。你会在互联网上找到一些。首先,尝试理解这个概念,然后,它会更清楚如何使用它。
    【解决方案2】:

    要控制由于此内存问题导致的崩溃,您需要这样做:

    BitmapFactory.Options options=new BitmapFactory.Options();
    options.inSampleSize = 8;
    Bitmap preview_bitmap=BitmapFactory.decodeStream(is,null,options);
    

    inSampleSize 值减少了内存消耗。

    可以从这个帖子获得更多信息:

    Strange out of memory issue while loading an image to a Bitmap object

    希望这会对你有所帮助。

    【讨论】:

    • 这会降低我的图像质量,我不能在图像质量上妥协
    【解决方案3】:

    增加堆空间..并打开自动删除,如果你去偏好和管理堆空间,就像在eclipse中一样;你可以点击那里的垃圾桶按钮

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      • 2021-05-07
      • 2011-07-08
      • 2011-08-16
      • 2014-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多