#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. Было бы неплохо очистить кэшируемые данные при создании новых. Таким образом, у вас будет один фрагмент данных для каждого типа.