我正在编写一个使用多个3D模型的Android应用程序.这种带纹理的模型会占用大量内存.我发现制造商对应用程序可以使用的堆大小设置了限制.例如我的平板电脑三星Galaxy Tab 8.9 P7310可以占用64MB的内存.
有没有办法增加应用程序可以使用的内存大小?
Rag*_*ood 209
您可以使用android:largeHeap ="true"来请求更大的堆大小,但这不适用于任何预装的Honeycomb设备.在2.3之前的设备上,您可以使用VMRuntime类,但这不适用于Gingerbread及更高版本.
获得尽可能大的限制的唯一方法是通过NDK执行内存密集型任务,因为NDK不像SDK那样强加内存限制.
或者,您只能加载当前在视图中的模型部分,并根据需要加载其余部分,同时从内存中删除未使用的部分.但是,这可能无法实现,具体取决于您的应用.
Com*_*are 110
有没有办法增加应用程序可以使用的内存大小?
在API级别11+运行的应用程序可以android:largeHeap="true"
在对<application>
清单中的元素要求比正常大,堆大小,并getLargeMemoryClass()
在ActivityManager
会告诉你,堆有多大.然而:
这仅适用于API Level 11+(即Honeycomb及更高版本)
无法保证大堆的大小
用户将感知您的大堆请求,因为它将强制其他应用程序从RAM中终止其他应用程序的进程以释放系统RAM以供大堆使用
由于#3,以及我预计android:largeHeap
会被滥用的事实,将来可能会放弃对此的支持,或者在安装时可能会向用户发出警告(例如,您需要获得特殊许可) )
目前,这个功能很简单
and*_*per 22
您无法动态增加堆大小.
您可以通过android:largeHeap="true"
在清单中使用来请求使用更多.
另外,您可以使用native memory (NDK & JNI)
,因此您实际上绕过了堆大小限制.
这里有一些关于它的帖子:
这是我为它制作的图书馆:
使用第二个过程.用AndroidManifest
新的声明声明Service
android:process=":second"
Run Code Online (Sandbox Code Playgroud)
第一个和第二个过程之间的交换 BroadcastReceiver
根据您的Android操作系统,可以通过两种方式完成此操作。
android:largeHeap="true"
在Android清单的应用程序标签中使用来请求更大的堆大小,但这不适用于任何之前的Honeycomb设备。VMRuntime.getRuntime().setMinimumHeapSize(BIGGER_SIZE);
Run Code Online (Sandbox Code Playgroud)
在设置HeapSize之前,请确保输入了适当的大小,该大小不会影响其他应用程序或OS功能。在进行设置之前,只需检查您的应用占用的大小,然后设置大小即可完成您的工作。不要使用太多内存,否则其他应用程序可能会影响。
参考:http : //dwij.co.in/increase-heap-size-of-android-application
归档时间: |
|
查看次数: |
148818 次 |
最近记录: |