如何增加Android应用程序的堆大小?

coo*_*xie 125 android

我正在编写一个使用多个3D模型的Android应用程序.这种带纹理的模型会占用大量内存.我发现制造商对应用程序可以使用的堆大小设置了限制.例如我的平板电脑三星Galaxy Tab 8.9 P7310可以占用64MB的内存.

有没有办法增加应用程序可以使用的内存大小?

Rag*_*ood 209

您可以使用android:largeHeap ="true"来请求更大的堆大小,但这不适用于任何预装的Honeycomb设备.在2.3之前的设备上,您可以使用VMRuntime类,但这不适用于Gingerbread及更高版本.

获得尽可能大的限制的唯一方法是通过NDK执行内存密集型任务,因为NDK不像SDK那样强加内存限制.

或者,您只能加载当前在视图中的模型部分,并根据需要加载其余部分,同时从内存中删除未使用的部分.但是,这可能无法实现,具体取决于您的应用.

  • 这完全取决于你拥有的代码.我不是NDK的专家,只知道基础知识.我建议你在android-ndk Google群组中提出这个问题以及你的代码说明,或者使用android-ndk标签在SO上发布一个新问题. (3认同)
  • `largeHeap = true`FTW (2认同)
  • android api的开发人员真的很有趣,他们就像你想要更多的堆?好的请求它,它只适用于那些需要它的人...同时每个开发人员都在添加它作为应用程序投入生产时添加的第一件事:) (2认同)

Com*_*are 110

有没有办法增加应用程序可以使用的内存大小?

在API级别11+运行的应用程序可以android:largeHeap="true"在对<application>清单中的元素要求比正常大,堆大小,并getLargeMemoryClass()ActivityManager会告诉你,堆有多大.然而:

  1. 这仅适用于API Level 11+(即Honeycomb及更高版本)

  2. 无法保证大堆的大小

  3. 用户将感知您的大堆请求,因为它将强制其他应用程序从RAM中终止其他应用程序的进程以释放系统RAM以供大堆使用

  4. 由于#3,以及我预计android:largeHeap会被滥用的事实,将来可能会放弃对此的支持,或者在安装时可能会向用户发出警告(例如,您需要获得特殊许可) )

  5. 目前,这个功能很简单

  • @Eftekhari:不是直接,适用于您的应用.拥有更多的东西可能会让你花费更多的CPU时间来完成这些东西,但那里的细节将取决于你对内存做了什么,而不是直接与请求`android:largeHeap`有关.但是,通过强制其他应用程序进程提前终止,请求大堆可能会损害整体用户体验. (2认同)

and*_*per 22

您无法动态增加堆大小.

您可以通过android:largeHeap="true"在清单中使用来请求使用更多.

另外,您可以使用native memory (NDK & JNI),因此您实际上绕过了堆大小限制.

这里有一些关于它的帖子:

这是我为它制作的图书馆:


Yur*_*rev 6

使用第二个过程.用AndroidManifest新的声明声明Service

android:process=":second"
Run Code Online (Sandbox Code Playgroud)

第一个和第二个过程之间的交换 BroadcastReceiver


Web*_*une 5

根据您的Android操作系统,可以通过两种方式完成此操作。

  1. 您可以android:largeHeap="true"在Android清单的应用程序标签中使用来请求更大的堆大小,但这不适用于任何之前的Honeycomb设备。
  2. 在2.3版之前的设备上,您可以使用VMRuntime类,但这不适用于Gingerbread及更高版本。请参见下面的操作方法。
VMRuntime.getRuntime().setMinimumHeapSize(BIGGER_SIZE);
Run Code Online (Sandbox Code Playgroud)

在设置HeapSize之前,请确保输入了适当的大小,该大小不会影响其他应用程序或OS功能。在进行设置之前,只需检查您的应用占用的大小,然后设置大小即可完成您的工作。不要使用太多内存,否则其他应用程序可能会影响。

参考:http : //dwij.co.in/increase-heap-size-of-android-application

  • 因此,显然,&lt;2.3是可行的,而&gt; 2.3是可行的,但是2.3是搞砸了! (4认同)