如果我在同一个进程中运行太多应用程序,是否会收到OOM错误?

时间:2014-09-15 20:04:12

标签: java android performance android-memory

我的手机上运行了20个小的Dashclock扩展程序。每个扩展实际上都是一个始终运行的服务。

目前,每个扩展程序都使用2.5 MB运行,这使我的内存消耗大约为50MB。

我认为如果每个资源都在同一个进程中运行,我可能会优化资源。每个ID目前都是一个单独的APK,因此拥有它自己的流程。

我还没能理解Android中堆的最大大小 - 每个进程或每个应用程序大约16MB?如果我更改清单文件以使所有这20个服务在同一个进程中运行,这会导致OOM错误吗?

2 个答案:

答案 0 :(得分:0)

您可以使用AndroidManifest中的"largeHeap"标志来获取额外的内存。

不幸的是,我没有看到任何关于这会增加你的堆的内存的硬数字,特别是因为它取决于设备。您始终可以使用getMemoryClass on the ActivityManager对象来限制用户可以运行的小部件数量。

答案 1 :(得分:0)

我通过在清单中设置android:shareUserID和“android:process”来在同一进程中运行30个进程。我能够在没有任何OOM错误或类加载错误的情况下正确运行它们。

我没有在清单中使用android:largeHeap标志,我的应用程序现在使用40M的内存。

我在Nexus 5上运行Cyanogenmod并且没有更改build.prop文件中的任何值。我在设备上的堆大小是16M。

除非有人解释为什么会发生这种情况,否则我会认为这是你没有得到OOM错误的答案,堆空间是基于每个应用程序而不是每个进程。