2014-06-06 3 views
0

무엇 내가 여기서 뭘하고있어 모든 업적을로드하고 로컬지도로 절약하는 결과 그게 꽤 반환 된 HashMap 비어와 함께 작동하지 않습니다 확신했다. 내가 알기로는, 그냥 빈 해시 맵을 만들고, "청취자"를 설정하고 빈 해시 맵을 반환하는 것입니다. 콜백은 데이터가 미래의 어떤 시점에서 준비가되었을 때 호출된다고 생각했지만 현재는이 메소드에서 리턴하기 전에 해시 맵에 데이터가 있습니다. 심지어는 기다릴 필요가 없습니다. 나에게 잘못된 일이 생기지 않는다. 나는 그 일이 쉽다는 것을 기쁘게 생각한다. 그러나 나는 내가 돌아 왔을 때 데이터가 hasmap에 이미 쓰여졌 기 때문에 더 느린 네트워크 연결에 문제가 생길 수 있다고 생각한다.구글 플레이 서비스 성과 로딩

맞습니다. 누구든지이 메서드에서 돌아 오기 전에 콜백이 호출되는 이유는 무엇입니까?

데이터가 어떻게 든 버퍼링되고, 결과 콜백을 설정할 때 안드로이드가 즉시 콜백을 호출하기 때문에 이런 경우일까요?

답변

1

Games.Achievements.load() 요청에서 forceReload를 false로 설정하면 대부분의 경우 데이터 캐싱이 사용됩니다. 메서드가 즉시 동일한 스레드에서 콜백을 실행하는지는 확실하지 않지만 그렇듯이 들립니다.

작동 방식이 마음에 들지 않는다면, 별도의 스레드에서 getAchievemnts()를 실행 한 다음 await()를 사용하여 콜백을 무시할 수 있습니다.

Achievements.LoadAchievementsResult result = load.await();