[Android]Android 앱 간 데이터 공유(ContentProvider와 ContentResolver)

2022. 4. 11. 00:02Tech/Mobile(Android, iOS)

    목차

이 글은 이전에 운영하던 깃 블로그에서 옮겨온 글입니다.

 

서론

[Android] Android 4대 컴포넌트Content Provider(콘텐츠 제공자)을 정리하면서, 앱 간 데이터 공유에서 좀 더 자세히 다뤄보겠다고 한적 있습니다. 오늘은 Android의 앱들 사이에서 데이터 공유를 어떻게 하는지 알아보려 합니다.

 

안드로이드에서 앱간에 데이터를 공유(전달받을 때)할 때가 있기 때문입니다. 연락처 앱의 연락처를 받아온다거나가 그러한 경우죠. 앱들 간에 데이터를 공유하는 방법은 다양합니다. 서버를 이용하는 방식, DB, BroadcastReceiver 등등… 이번에는 그중에서도 'ContentProvider'와 'ContentResolver'를 이용하는 방식에 대해 알아보겠습니다. 참고로 코딩 방법이 아닌 개념에 관한 글입니다.


ContentProvider와 ContentResolver

 

 앱들은 각각 DB를 가질 수 있습니다. 해당 DB에 있는 데이터를 Interface를 정의하여 외부로(다른 Package = 다른 앱) 제공하는 방법이 바로 ContentProvider 컴포넌트를 이용하는 것입니다. 즉, ContentProvider는 데이터(Content)를 제공(Provide) 해주는 녀석인 것입니다.

 Give and Take 라는 말이 있습니다. 주는 녀석이 있으면 받는 녀석도 있지 않을까요? 그 녀석이 바로 ContentResolver라는 녀석입니다. ContentResolver는 객체입니다. URI로 데이터를 제공받을 ContentProvider를 찾아서 접근에 관한 결과를 리턴 받습니다. 아래는 이 과정을 도식화한 것입니다.

 

[그림 1. ContentProvider 와 ContentResolver 의 데이터를 주고 받는 과정]

 App의 디비에서 ContentProvider를 이용하여 특정 데이터를 제공하고 있습니다. ContentProvider는 자신의 URI를 가지고 있고 ContentResolver는 이 URI를 이용하여 ContentProvider를 찾아가는 것이죠.

 


URI

위에서 URI로 데이터를 주고 받는다고 했는데 그렇다면 URI는 무엇일까요? 간단한 설명은 아래와 같습니다.

 

URI : [scheme]: //[authority]/[path]/[id] 포맷을 가지는 국제 표준

  • [scheme] : uri의 주최의 scheme ContentProvider 의 경우는 'content'라는 scheme을 가진다.
  • [authority] : 패키지의 Provider 고유 식별자.
  • [path] : 데이터 경로
  • [id] : 추가적인 정보, 파라미터

ex) content: //codinggom-daily.tistory.GomProvider/posts/25
=> codinggom-daily.tistory 패키지의 GomProvider를 찾아 25번 posts의 데이터를 제공받겠다.


ContentObserver.

 

 Observer라는 개념은 무언가를 감시하는 것입니다. ContentObserver가 감시하는 것은 URI에 해당하는 데이터가 변경되는 것을 감지합니다. ContentObserver class의 onChange() 함수를 override 해서 데이터 변화를 감지했을 때 처리를 할 수 있습니다.


리소스 출처

[그림 1] : Rhyshan, https://rhyshan.com/493

 

반응형
LIST