4

我已经在我的布局上加载了 3ListView秒和 1 秒。EditText

当我触摸 时EditText,键盘打开。在那一刻,我使用以下代码检查内存大小:

Runtime rt = Runtime.getRuntime();
long vmAlloc =  rt.totalMemory() - rt.freeMemory();
long nativeAlloc = Debug.getNativeHeapAllocatedSize();

Log.d("Memory",className+"Maximum   : "+formatMemoeryText(rt.maxMemory()));

Log.d("Memory",className+"VM Heap   : "+formatMemoeryText(rt.totalMemory()));
Log.d("Memory",className+"NativHeap : "+formatMemoeryText(Debug.getNativeHeapSize()));

Log.d("Memory",className+"VM    (A) : "+formatMemoeryText(vmAlloc));
Log.d("Memory",className+"Nati(A)   : "+formatMemoeryText(nativeAlloc));

Log.d("Memory",className+"TotalAll  : "+formatMemoeryText(nativeAlloc+vmAlloc));
Log.d("Memory", "----------------------------------------------------");

每次键盘打开本机堆大小都会增加。最终应用程序将强制关闭。

我试过了:

System.gc();
Runtime.getRuntime().gc();

但它只减少了大约 0.5-1MB。下次我打开键盘时,它会增加 20-30MB。

如何防止应用关闭或清除其本机堆内存?

4

2 回答 2

3


并不是说您的应用程序由于键盘导致内存不足而崩溃,而是您的程序中一定有一些东西导致了内存泄漏您的程序崩溃,请检查您的代码,并查找内存泄漏。

于 2013-07-23T04:30:21.400 回答
0

确保在打开 android 键盘时不会更改设备方向。因为如果是这样,那么您的活动将被重新创建,并且如果您的任何对象持有您的活动的引用,则可能会导致内存泄漏。

于 2013-10-02T05:36:35.183 回答