分配本机内存时内存不足

时间:2012-11-15 13:17:54

标签: android memory-management opengl-es native

我将许多纹理加载到(Open GL)应用程序(内存中未压缩的数百兆字节)中,因此我使用LRU缓存并在需要时丢弃它们。在Android中,Open GL纹理在本机堆中分配,因此我可以使用所有可用内存。

问题在于......

ActivityManager activityManager = (ActivityManager)VhbApplication.getInstance().getSystemService(Context.ACTIVITY_SERVICE);
ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
activityManager.getMemoryInfo(memoryInfo);
memoryInfo.availMem
availMem 在某些设备上报告奇怪的数字:Galaxy tab 10.1与3.2 - 160MiB和系统显示300MiB免费,Acer Iconia Tab A200与4.0.3报告与系统相同的可用内存值〜400MiB。第二个问题是,在Acer上我出现了内存错误(不是以OutOfMemoryError的形式,可以作为异常捕获。然后它只是命中一个SIGSEGV),即使在分配大小小于200MiB的纹理时也是如此。并非总是如此,但如果应用程序运行的时间足够长,从缓存中删除了一些纹理并加载了新的纹理,则应用程序可能会崩溃。

所以我无法以非常强大的方式设置缓存大小。那些随机的OOM崩溃只与宏碁有关。我的其他设备,如Galaxy tab 10.1,Nexus 7甚至Galaxy note(5“),我确实得到了这些随机崩溃。我正确地删除了Open GL纹理。

宏碁对他们的Androids有一些限制,不仅限制了VM内存大小,还限制了本机堆分配?或者它是一个有缺陷的Open GL驱动程序? Acer和Galaxy标签使用几乎相同的Tegra 2 GPU。

如何可靠地设置缓存大小?我需要至少100MiB。或者以其他方式将100-200 MiB的纹理强大地分配到Android Open GL应用程序中?

0 个答案:

没有答案