【问题标题】:Increase Available Heap Memory for Android System Application增加 Android 系统应用程序的可用堆内存
【发布时间】:2019-02-02 11:56:05
【问题描述】:

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

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

编辑

对于那些想知道我在 Android 清单中已经有 largeHeap=true 的人,它对这种情况没有帮助。

【问题讨论】:

  • 您是否尝试过在启用largeHeap 的情况下运行该应用程序?诚然,文档表明这不是首选,因为在一天结束时;设备对它可以分配多少内存拥有最终决定权...developer.android.com/guide/topics/manifest/…
  • 是的,抱歉忘记提到 largeHeap 已启用。
  • 啊,那么也许你也可以寻找一些优化技巧(也许甚至从下面的答案中)......经过一番搜索,我发现这是一个很常见的问题:stackoverflow.com/questions/27396892/…。第一个答案也涉及一些毕加索的用法。

标签: android performance memory android-source dalvik


【解决方案1】:

可以在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();
}

【讨论】:

    猜你喜欢
    • 2017-02-23
    • 2022-11-25
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    相关资源
    最近更新 更多