我有一个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
的人来说,这无助于此。
答案 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();
}