【问题标题】:When Android gives OutOfMemory Exception?Android 何时给出 OutOfMemory 异常?
【发布时间】:2023-03-22 00:57:01
【问题描述】:

我正在阅读有关 Android 中的 OutOfMemory 错误的信息,该错误是在 Android 内存不足时出现的。我们是否知道如果我的应用程序消耗了一些 x MB 的内存,那么它会给出 OutOfMemory 错误? Android 是否会根据设备和总物理内存为每个应用分配特定数量的内存?

例如,我的设备安装了 2GB RAM,操作系统占用 500MB,其他应用占用 500MB。现在我的应用程序有 1048MB 的内存可以运行。那么在这种特殊情况下,当系统给出 OutOfMemory 时呢?

【问题讨论】:

  • 这是一个非常好的问题。 Google 有时会报告关于我的应用程序内存不足的异常(只有两个或三个应用程序)。但我不知道为什么,那里没有重量级的 UI 或其他工作。重要的问题是:如何处理这个......?
  • @Yogandra .....非常有趣。有时我想知道为什么我会错过这些东西......
  • 谢谢@Opiatefuchs

标签: android memory out-of-memory


【解决方案1】:

每个应用程序都有一些可用于堆分配的内存限制。它因不同的手机而异(您也可以在清单中增加它)。 This answer 对此提供了非常详细的信息,给出了一些模型和设置的具体数据。

至于如何确定:

它往往更多地基于屏幕分辨率,因为更高分辨率的屏幕倾向于处理更大的位图,因此 Google 提出了堆大小建议,希望设备制造商能够遵守。 CommonsWare

【讨论】:

    【解决方案2】:

    你要找的东西最好由谷歌自己描述Here


    要获得可以使用的内存量,您可以这样做:

    ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
    int memoryClass = manager.getMemoryClass();
    Log.v("onCreate", "memoryClass:" + Integer.toString(memoryClass));
    

    【讨论】:

      【解决方案3】:

      Heap size 引起的 OutOfMemory 异常,与 RAM 无关。

      为了维持一个功能强大的多任务环境,Android 设置了一个 每个应用程序的堆大小的硬限制。确切的堆大小限制 根据设备可用的 RAM 大小在设备之间有所不同 全面的。如果您的应用程序已达到堆容量并尝试 分配更多内存,它会收到 OutOfMemoryError。

      这里有一个有用的链接:https://developer.android.com/training/articles/memory.html

      希望对你有所帮助:)

      【讨论】:

        猜你喜欢
        • 2011-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-27
        • 2011-06-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多