增加适用于Android系统应用程序的可用堆内存

时间:2018-08-27 22:46:16

标签: android performance memory android-source dalvik

我有一个Android应用程序在运行KitKat的嵌入式Android设备上作为特权系统应用程序(/ system / priv-app中的apk)运行。嵌入式系统具有1GB的内存,而应用程序本身看起来大约只有140MB的堆内存。我遇到了性能问题,在尝试在RecyclerView中分配新的位图图像(图像随Picasso加载)时,不断调用GC_FOR_ALLOC。当您滚动时,这会导致明显的结结。设备本身(cat /proc/meminfo拥有约350MB的可用内存。

由于我可以访问在此设备上运行的框架代码,因此我想知道是否有任何方法可以增加堆中可用的默认内存量?当我运行adb shell dumpsys meminfo时,应用程序似乎再也不想占用更多内存了。

编辑

对于那些想知道我在Android清单中已经有largeHeap=true的人来说,这无助于此。

1 个答案:

答案 0 :(得分:0)

您可以在AndroidManifest.xml中启用largeHeap属性,就像这样

<application
    android:name="your package name"
    android:icon="@drawable/fab"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:largeHeap="true">

</application>

此外,您可以覆盖

  

onTrimMemory(int级别)   和   onLowMemory()

在您自己的应用程序中,您可以在这两个函数中执行某些操作。(我正在使用glide加载图像,并且需要调用一些api)

@Override
public void onTrimMemory(int level) {
    if (level == TRIM_MEMORY_UI_HIDDEN){
        Glide.get(this).clearMemory();
    }
    Glide.get(this).trimMemory(level);
    super.onTrimMemory(level);
}

@Override
public void onLowMemory() {
    Glide.get(this).clearMemory();
    super.onLowMemory();
}