Утечка служб Google Play

Я начал использовать Google Play Game Services некоторое время назад, а вчера, проверяя logcat, я не смог заметить эту ошибку:

E / DataBuffer (3183): обнаружена утечка внутренних данных в обнаруженном объекте DataBuffer! Обязательно явно вызывайте close () на всех объектах, расширяющих DataBuffer, когда вы закончите с ними. (Внутренний объект: com.google.android.gms.common.data.DataHolder@40555410)

Это происходит несколько раз подряд. Я не совсем уверен, почему это происходит. Это не приводит к сбою моего приложения и не приводит к прекращению работы google-достижений / лидеров.

Все, что я знаю, это то, что это связано с функциями «unlockAchievementImmediate» и «submitScoreImmediate».

Кто-нибудь сталкивался с этой проблемой раньше или имеет какие-либо предложения?


Изменить: в моем приложении я использую только «unlockAchievementImmediate» и «submitScoreImmediate». Эти функции не возвращают никаких буферов, которые требуют закрытия.

Solutions Collecting From Web of "Утечка служб Google Play"

Эти элементы расширяют DataBuffer: AchievementBuffer, AppStateBuffer, FilteredDataBuffer, GameBuffer, InvitationBuffer, LeaderboardBuffer, LeaderboardScoreBuffer, MetadataBuffer, MomentBuffer, UserBuffer, PersonBuffer, PlayerBuffer, TurnBasedMatchBuffer.

Они обычно встречаются у ваших слушателей этих предметов. Например:

public void onTurnBasedMatchesLoaded(int statusCode, LoadMatchesResponse response) { TurnBasedMatchBuffer buff = response.getMyTurnMatches(); // do some stuff with buff buff.close() } public void onPlayersLoaded(int statusCode, PlayerBuffer buff) { Player p = buff.get(0); buff.close(); } 

Ошибка не сообщается только после выхода из приложения и повторного ввода. Если я вызову свои матчи 3 раза и выйду из приложения, не вызвав buff.close (), я могу ожидать увидеть предупреждение 3 раза, снова открыв его. Добавьте в buff.close (), и они исчезнут. Вуаля!

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

Объект буфера данных содержит метод release() поэтому после того, как вы закончите с этим объектом, просто отпустите его, используя databuffer.release(); ,