Увеличение доступной памяти кучи для системного приложения Android - PullRequest
0 голосов
/ 28 августа 2018

У меня есть приложение Android, работающее как привилегированное системное приложение (apk в / system / priv-app) на встроенном устройстве Android, на котором работает KitKat. Встроенная система имеет 1 ГБ памяти, а само приложение выглядит так, как будто ему выделено около 140 МБ динамической памяти. Я сталкиваюсь с проблемами производительности, когда GC_FOR_ALLOC постоянно вызывается, когда я пытаюсь выделить новые растровые изображения в RecyclerView (изображения загружаются с помощью Picasso). Это вызывает заметное заикание при прокрутке. Само устройство (cat /proc/meminfo) имеет около 350 МБ свободной памяти.

Поскольку у меня есть доступ к коду фреймворка, который работает на этом устройстве, мне интересно, есть ли способ увеличить объем памяти по умолчанию, доступный в куче? Когда я запускаю adb shell dumpsys meminfo, приложение никогда не хочет больше памяти.

редактировать

Тем, кто интересуется, у меня уже есть largeHeap=true в манифесте Android, и это не помогает в этой ситуации.

1 Ответ

0 голосов
/ 28 августа 2018

Вы можете включить атрибут largeHeap в AndroidManifest.xml, как этот

<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();
}
...