Объекты, удаленные из ящика улья, по-прежнему загружаются в память

В моем приложении Flutter у меня есть коробка Hive с объектами Player. Просто для отладки я вывожу некоторые данные из моих объектов игрока в конструкторе, например:

        Player({
    @required String name,
    @required this.id,
  }) {
    this.name = name.toUpperCase();
    print('${this.toString()}');
  }

  @override
  String toString() {
    return 'id: $id, name: $name';
  }  

Игроки добавляются в поле следующим образом, где player.id - уникальный ключ:

        playerBox.put(player.id, player);

При запуске приложения я также печатаю значения playerBox:

       print (playerBox.values);

Что дает мне всех добавленных игроков. Все идет нормально. Но ... После удаления такого плеера:

       playerBox.delete(playerId);

Он начинает вести себя немного странно. Когда я перезапускаю приложение, удаленного игрока больше нет в playerBox.values, поэтому он явно удален оттуда. Но конструкторы из всех удаленных объектов игрока по-прежнему работают.

Проверяя стек, я вижу, что эти объекты действительно созданы PlayerAdapter. Поэтому по какой-то причине удаленные объекты все еще считываются Hive с диска, но их нет в коробке.

** РЕДАКТИРОВАТЬ

Я также проверил файл player.hive на своем эмуляторе, и все удаленные модели фактически находятся в файле. Даже если они удалены и не будут возвращены с playerBox.values

Есть идеи, в чем может быть причина? Это ожидаемое поведение?

1 ответ

Отвечаю на это сам.

Есть идеи, в чем может быть причина? Это ожидаемое поведение?

Да и да. Думаю, мне следовало более внимательно проверить эти документы: Сжатие

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

Я решил это, сжав коробку после удаления следующим образом:

      playerBox.compact();
Другие вопросы по тегам