【发布时间】:2013-03-16 09:10:27
【问题描述】:
众所周知,Android 应用程序的 VM 堆大小是有限的。 (主要是 16、24、32、48 或 64 MB RAM,具体取决于硬件)
我们可以得到实际的堆大小
ActivityManager am = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE);
Toast.makeText(this, "HEAP SIZE: " + am.getMemoryClass() + "MB", 1).show();
.
但是,如果我打开一个新的 Intent,内存策略是什么???:
Intent intent = new Intent(MainActivity.this, NewActivity.class);
MainActivity.this.startActivity(intent);
这个新活动是否获得了完整的堆大小并且旧活动在后台保持,并且它的内存被缓存?
或者意图获得一个全新的虚拟机?
我有一个内存非常密集的应用程序,其中大量填充了 Grid- 和 ListViews。 从 Android 3.0 开始,位图是在堆内分配的,这会导致很多令人头疼的问题和 OutOfMemory 错误的麻烦……我想知道我是否可以在它们自己的 Intent 中超越内存饥饿的视图。
【问题讨论】:
-
一个应用的所有活动共享同一个堆。如果您想外包它,您的 Activity 必须在不同的应用程序中(不同的包名称,并且还单独上传到 Play) - 一点都不实用:-)
标签: android android-listview out-of-memory heap-memory android-gridview