Сохраняйте данные через очистители памяти - PullRequest
0 голосов
/ 19 октября 2018

У меня проблема с сохранением связанных данных действия.Некоторые очистители памяти (такие как clean master), а также GC некоторых устройств, похоже, удаляют все данные и связанные данные из действия и соответствующего ViewModel, вызывая сбой действия.

Мой вопрос : есть ли способ хранения данных (обычно передаваемых через пакет), необходимых для загрузки действия?

Я пытался найти решение, чтобы попытаться сохранить данные с помощью onSavedInstanceState

@Override
protected void onSaveInstanceState(Bundle outState) {
    outState.putInt(BUNDLE_ARGUMENT_CUSTOMER_ID, this.mViewModel.getCustomer().getId());

    super.onSaveInstanceState(outState);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);

    if (savedInstanceState != null) {
        this.mViewModel.setCustomer(new Customer(savedInstanceState.getInt(BUNDLE_ARGUMENT_CUSTOMER_ID, -1)));
    }
}

А также полагаться на ViewModel, чтобы сохранить данные, ни один из которых не работал.Однако пока единственное решение, которое действительно работает, - это сохранение данных в локальном хранилище (с использованием SharedPreference или InternalStorage ), которые открывают некоторые другие проблемы дополнительного управления данными.Даже после сохранения данных эффект приложения такой, как если бы произошел сбой при навигации по заднему стеку.

1 Ответ

0 голосов
/ 19 октября 2018

К сожалению, вы ДОЛЖНЫ использовать какую-то форму более постоянного хранилища, например файл или SQLite, поскольку весь смысл этих «чистых средств» заключается в возврате используемых ресурсов.
При желании вы можете хранить данные в облачном провайдере (как firebase) и запросить его.Firebase дает вам ГБ данных для хранения на бесплатном уровне.Это накладные расходы, но я настоятельно рекомендую использовать файл или SQLite.

- это лучшая практика, которую вы должны будете принять. В любом случае, вы не виноваты в том, что пользователь надевает эти очистители на свои телефоны, вам просто нужно изящно управлять жизненным циклом вашего приложения

Oneопция - отключить историю, чтобы пользователь не мог перемещаться по заднему стеку.Другой вариант - всегда проверять, загружены ли данные в память, прежде чем пытаться отобразить их и отображать сообщение об ошибке в случае преждевременного удаления данных.вы можете обнаружить другие приложения, установленные на устройстве пользователя, и сообщить им, что использование этих приложений приведет к сбою ВАШЕГО приложения (но я не рекомендую это, поскольку оно добавляет накладные расходы, которые уменьшают количество людей, желающих загрузить ваше приложение)

...