如何在Android中释放内存?

时间:2014-08-12 02:38:23

标签: java android out-of-memory

我想知道如何以编程方式在Android中释放内存,因为我的布局包含很多视图,当我转到任何Activity时,应用程序停止工作并给我一个内存不足的错误。

So what is the way to release Memory  ?

3 个答案:

答案 0 :(得分:6)

Android已经定义了如何使用Click here.

可能的原因:

我们遇到内存不足错误的原因有很多。其中一些是:

  1. 您正在进行一些持续需要大量内存的操作,并且在某些时候它超出了进程的最大堆内存限制。

  2. 您正在泄漏一些内存,即您没有使之前分配的对象符合垃圾收集(GC)的条件。这称为内存泄漏。

  3. 您正在处理大型位图并在运行时加载所有这些位图。你必须非常小心地处理大位图,只需加载你需要的大小而不是整个位图,然后进行缩放。

  4. 诊断OOM的工具:

    在Android中,有一些工具可用于查找内存泄漏,其中一个是MAT(Memory Analyzer Tool)。这可以用作Eclipse的插件或作为独立的工具。

    让我们首先安装MAT并将其与Eclipse一起使用,并带有分步指南:

    1. 要启动此工具,您必须从link
    2. 下载此工具
    3. 启动Eclipse并运行您的应用程序。
    4. 转到DDMS并选择您的应用程序并单击转储HPROF文件按钮,它将要求您保存hprof文件。将其保存在硬盘上。
    5. 运行位于已下载的MAT包中的MemoryAnalyzer.exe文件。
    6. 他的MAT工具将无法理解Eclipse生成的hprof文件,因此您必须使用以下命令使用android-sdk的tools文件夹中的hprof-conv工具进行转换:
    7.   

      hprof-conv com.example.android.hcgallery.hprof mat.hprof

      • 现在这个文件已准备好与MAT一起使用。

      enter image description here

      还有一件事我发现 Memory Analysis for Android Applications

答案 1 :(得分:1)

你不能释放内存,如果没有使用该对象,那么垃圾收集器的工作就是找到这个对象的引用,然后垃圾收集器才会启动。

问题是你有一个消耗大量内存的lots of nested View,你可以将视图最小化以在堆中使用更少的内存空间,或者在需要时动态添加视图并在删除时删除其他视图你不需要它来节省内存空间。

答案 2 :(得分:-2)

我使用这个onBackPressed事件,它完全释放我的应用程序进程:

android.os.Process.killProcess(android.os.Process.myPid());

希望有所帮助