我的手机上运行了20个小的Dashclock扩展程序。每个扩展实际上都是一个始终运行的服务。
目前,每个扩展程序都使用2.5 MB运行,这使我的内存消耗大约为50MB。
我认为如果每个资源都在同一个进程中运行,我可能会优化资源。每个ID目前都是一个单独的APK,因此拥有它自己的流程。
我还没能理解Android中堆的最大大小 - 每个进程或每个应用程序大约16MB?如果我更改清单文件以使所有这20个服务在同一个进程中运行,这会导致OOM错误吗?
答案 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错误的答案,堆空间是基于每个应用程序而不是每个进程。