구글 컨퍼런스에서 구글IO를 소개하면서 twitter app의 저자가 SyncAdapter를 안드로이드 개발을 하면서 빨리 습득해야할 기술 중의 하나로 꼽고 있습니다. 그런데 한국사이트에서는 이 부분을 거의 찾아볼 수 없고 안드로이드 샘플프로젝트에 예제가 하나 들어 있긴한데, 제 머리가 안좋아서 시간을 좀 들여야할 것 같습니다. 그나마 외국 사이트들에서는 어느정도 설명을 해주고 있긴한데 그래도 여전히 많이 부족한 느낌입니다.
제가 당장 프로젝트에서 이 기술을 적용해야 하는 상황이라 제대로 이해를 해야할 것 같은데, 쉽지 않습니다. SyncAdapter에 대해 자세하게 배울 수 있는 링크나 강좌같은 게 있으면 알려주시면 감사하겠습니다.
* 위에서 말씀드린 구글 컨퍼런스 유투브 링크 올립니다. 유투브가 이제는 자동 자막 기능까지 생겼습니다. 어느정도는 이해를 하시면서 보실 수 있지 않을까 생각합니다.
http://www.youtube.com/watch?v=xHXn3Kg2IQE&feature=player_embedded
제가 그 session 동영상을 보고 느낀 대로만 적을께요.... 물론 영어는 해석하지 않았습니다. 안들려요 ㅡㅡㅋ
제가 볼때는 SyncAdapter가 "Sync 할 Data를 판별하여 REST 명령을 내리는 모듈"이라고 보이는데요.
상위 Application Layer (Activity나 CursorAdapter)의 모든 명령은 ContentProvider로 떨어집니다.
query의 경우는 ContentProvider가 가지고 있는 자체 데이터를 리턴합니다. 따라서 초기에 한번은 Full Sync 를 해야합니다.
ContentProvider가 insert update delete 명령을 받으면 Queue에 쌓아둡니다.
(이 Queue를 ContentProvider에 둘것이냐 SyncAdapter에 둘것이냐는 선택하기 나름으로 보이네요.)
SyncAdapter는 수시로 혹은 Queue에 내용이 들어왔을때 동작하기 시작해서
Queue에서 내용을 빼서 하나씩 REST로 변환하여 실행합니다.
REST 결과가 나오면 (성공이냐 실패냐가 나올수도 있고 구체적인 데이터가 나올수도 있는데 어쨋든)
그 결과에 따라 Processor는 ContentProvider에 insert, delete, update 명령을 내리고
마지막으로 ContentProvider는 자체 데이터 업데이트를 수행하고 notify합니다.
이런경우 ContentProvider는 "위에서 내려오는 명령"과 "밑에서 올라오는 명령"을 구분할 필요가 있습니다.
이는 URI로 충분히 구분할 수 있는데요. 위에서 내려오는 명령과 아래서 올라오는 명령이 동작 차이가 있다는점만 알고 계시면 될듯합니다.
답글 감사드려요. 동영상 밑에 스크립트 버튼 누르면 subtitle이 있습니다. 싱크어댑터에서 중요한 세가지가 싱크를 위한 어카운트 생성과와 싱크를 수행할 싱크어댑터가 될 것 같습니다. 지금 차근 차근 예제를 가지고 커스터마이징 해보는 중입니다.
말씀하신 초기에 풀싱크는 안드로이드 세팅에 보면 Account & Sync 섹션에 어카운트를 추가하게 되어 있어서 어카운트 추가하고 나면 풀싱크 하게 됩니다. 이 화면을 독립적으로 호출해서 로그인 대신에 사용할 수 있는 지는 아직 모르겠습니다. 한번 나중에 해보려구요.
암튼 저한테는 굉장히 유용한 것으로 보입니다.




참고할 만한 링크:
http://ericmiles.wordpress.com/2010/09/22/connecting-the-dots-with-android-syncadapter/
http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-1/
http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-2/