Google Play Services Leak

♀尐吖头ヾ 提交于 2020-01-10 22:02:09

问题


I started using Google Play Game Services a while ago, and yesterday while checking the logcat I couldnt help to notice this error:

E/DataBuffer(3183): Internal data leak within a DataBuffer object detected! Be sure to explicitly call close() on all DataBuffer extending objects when you are done with them. (internal object: com.google.android.gms.common.data.DataHolder@40555410)

It occurs several times in a row. Im not exactly sure why it arises. It doesnt make my app crash nor makes the google achievement/leaderboards functionality stop working.

All I know is that it is related to the functions "unlockAchievementImmediate" and "submitScoreImmediate".

Has anybody encountered this problem before or has any suggestions?


Edit: In my app I only use "unlockAchievementImmediate" and "submitScoreImmediate". These functions don't return any buffers that need any closing.


回答1:


These items extend DataBuffer: AchievementBuffer, AppStateBuffer, FilteredDataBuffer, GameBuffer, InvitationBuffer, LeaderboardBuffer, LeaderboardScoreBuffer, MetadataBuffer, MomentBuffer, ParticipantBuffer, PersonBuffer, PlayerBuffer, TurnBasedMatchBuffer.

These are generally found in your listeners of those particular items. For example:

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();
}

The error doesn't report until after I exit my app and re-enter. If I call up my matches 3 times and exit the app without calling buff.close(), I can expect to see the warning 3 times upon opening it back up again. Add in the buff.close() and they disappear. Voila!




回答2:


Any SubClass of Data Buffer needs to be released. So after you are done with that object release it.

Data Buffer object contains a release() method so after you are done with that object just release it using databuffer.release();.



来源:https://stackoverflow.com/questions/21696662/google-play-services-leak

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!