2013-07-09 3 views
1

Google Play 서비스에서 AppStateClient에 문제가 있습니다. 내가 하나의 장치에서 실행 아래의 코드를 할 때 나는 예상대로 onStateLoaded에 들어가 -하지만 다른 장치가 포함될 때 나는 데이터 충돌이없이 충돌 모든 시간을 얻을충돌없이 onStateConflict

@Override 
    public void onSignInSucceeded() { 
     Log.i("", "StatCount" + playHelper.getAppStateClient().getMaxNumKeys()); 
     playHelper.getAppStateClient().updateState(0, "test".getBytes()); 
     playHelper.getAppStateClient().loadState(new OnStateLoadedListener() { 
      @Override 
      public void onStateLoaded(int i, int i2, byte[] bytes) { 
       Log.i("AppStateTest","load {" + new String(bytes) +"}"); 
      } 

      @Override 
      public void onStateConflict(int i, String s, byte[] bytes, byte[] bytes2) { 
       Log.i("AppStateTest","conflict " + new String(bytes) +" <> " + new String(bytes2)); 
      } 
     },0); 
    } 

출력 :

I/AppStateTest(4173): conflict test <> test 

답변

1

이것은 의도 한대로 작동합니다. 충돌이 있다고해서 데이터이 다르다는 의미는 아닙니다. 충돌을 결정할 때 데이터 자체는 이 아니며이 아닙니다. 충돌은 다른 장치가이 장치가 마지막으로 읽은 이후로 데이터를 썼다는 것을 결정합니다. 이를 고려해

  1. 디바이스 A는
  2. 장치 B는
  3. 디바이스 A는
  4. 장치 B는 이것으로

"푸"기록 "푸"기록 "푸"판독 "푸"판독 데이터가 같더라도 장치 B는 충돌을 일으 킵니다 (4 단계 이후에 언제든지 데이터를로드 할 때 신호를 받음). 데이터가 다르기 때문에가 아니라 데이터가 마지막으로 읽은 이후 다른 소스에서 쓰기가 발생했기 때문에.

앱 논리의 관점에서 볼 때 충돌이 아닌 것으로 판단되면 resolveConflict를 호출하여 문제를 해결하면됩니다.

관련 문제