Как долго неактивное действие будет храниться в памяти и сможет восстанавливаться из savedInstanceState?

#android

#Android

Вопрос:

Мне было интересно, есть ли способ примерно узнать, как долго неактивное Activity действие будет оставаться в памяти и сможет восстанавливаться savedInstanceState ?

Причина в том, что для каждого Activity я присваиваю им уникальный uuid для доступа к данным временного сохранения из БД.

Когда пользователь выполняет «правильный» выход (нажав кнопку «Назад»), моя система знает, что связанный uuid больше не используется, и может очистить все связанные данные.

 @Override
public void onPause() {
    super.onPause();

    if (this.isFinishing()) {
        // Perform uuid DB clean up and all associated data.
    }
}
 

Однако, когда пользователь переводит Activity неактивное состояние, выполняя HOME button place, мы не можем просто удалить uuid из базы данных.

Поскольку существует вероятность, что пользователь может выполнить Activity восстановление в любой момент времени. uuid может быть извлечен savedInstanceState и повторно использован снова.

Тем не менее, мы должны каким-то образом очистить базу данных в какой-то момент. Если нет, БД просто растет бесконечно.

Наш план заключается в назначении метки времени для uuid. Скажем, если uuid не используется в течение 3 дней, мы предполагаем, что он больше не связан ни с одним активным Activity или восстанавливаемым Activity . Затем мы можем безопасно удалить ее из базы данных.

Мне было интересно, есть ли способ / или документация, чтобы узнать, как долго неактивная активность будет храниться в памяти и сможет восстанавливаться из savedInstanceState? С такой информацией мы можем знать, как долго мы должны ждать, прежде чем помечать uuid как истекший.

p / s

Мы не сохраняем наши данные savedInstanceState , поскольку размер наших данных довольно динамичен. Оно варьируется от нескольких килобайтов до нескольких мегабайтов. В настоящее время мы сталкиваемся android.os.TransactionTooLargeException с некоторыми случаями.

Комментарии:

1. Android сохраняет действия до тех пор, пока это возможно. Только одно условие для этого потока — использование памяти. Например, ваша активная активность может быть прервана в любое время в фоновом режиме и на переднем плане при повороте. Почему вы используете DB для временных / несохраненных данных? Вы можете использовать для этого ViewModel или savedInstanceState, если ваши данные можно разделить.

2. Смотрите Наше обновление о том, почему мы не используем savedInstanceState . ViewModel проблема не будет решена, поскольку она не может обрабатывать случай восстановления активности (не изменения конфигурации)

3. Было бы неплохо очистить кэшируемые данные при создании новых. Таким образом, у вас будет один фрагмент данных для каждого типа.