상세 컨텐츠

본문 제목

앱 개발 방법 - 앱 기본 요소 (콘텐츠 제공자)

안드로이드 프로그래밍/앱 기본 요소

by green post it 2021. 12. 31. 14:17

본문

반응형

안드로이드 프로그래밍

콘텐츠 제공자

콘텐츠 제공자는 파일 시스템, SQLite 데이터베이스, 웹상이나 앱이 액세스할 수 있는 다른 모든 영구 저장 위치에 저장 가능한 앱 데이터의 공유형 집합을 관리합니다.

다른 앱은 콘텐츠 제공자를 통해 해당 데이터를 쿼리하거나, 콘텐츠 제공자가 허용할 겨우에는 수정도 가능합니다.

 

예를 들어 Android 시스템은 사용자의 연락처 정보를 관리하는 콘텐츠 제공자를 제공합니다. 적절한 권한을 가진 앱이라면 콘텐츠 제공자(예 : ContactsContract.Data)를 쿼리하여 특정한 인물에 대한 정보를 읽고 쓸 수 있습니다.콘텐츠 제공자를 데이터베이스에 대한 추상화로 생각하기 쉽습니다.

 

이런 일반적인 사례에 대해 콘텐츠 제공자에 빌드된 API 및 지원이 많기 때문입니다. 다만 시스템 설계 관점에서 볼 때 핵심 목적이 서로 다릅니다. 시스템의 경우 콘텐츠 제공자는 URI 네입스페이스에 넣을 데이터를 매핑할 방식을 결정하고 해당 URI를 다른 엔터티에 전달할 수 있습니다.

이를 전달받은 엔터티는 URI를 사용하여 데이터에 액세스합니다. 시스템이 이렇게 할 수 있는 데에는 앱 관리에 몇 가지 특별한 점이 있기 때문입니다.

 

  • URI를 할당하더라도 앱을 계속 실행할 필요가 없으므로 URI를 소유한 앱이 종료된 후에도 URI를 유지할 수 있습니다.
  • 이 URI는 중요하고 조밀한 보안 모델을 제공합니다. 예를 들어 앱은 클립보드에 있는 이미지에 URI를 할당하고 콘텐츠 제공자가 검색하도록 하여, 다른 앱이 자유롭게 이미지에 액세스하지 못하게 막을 수 있습니다. 두 번째 앱이 클립보드에서 해당 URI에 액세스하려고 시도하면 시스템에서는 임시 URI 권한을 부여하여 그 앱이 데이터에 액세스하도록 허용할 수 있습니다. 따라서 두 번째 앱에서는 URI 뒤에 있는 데이터 외에 다른 것에는 액세스할 수 없습니다.

 

콘텐츠 제공자는 앱 전용이어서 공유되지 않는 데이터를 읽고 쓰는 데도 유용합니다.

 

콘텐츠 제공자는 ContentProvider 의 하위 클래스로 구현되며, 다른 앱이 트랜잭션을 수행할 수 있도록 활성화하는 표준적인 API 집합을 구현해야 합니다.

 

Android 시스템 디자인은 어떤 앱이든 다른 앱의 구성 요소를 시작할 수 있다는 점에서 독특한 측면이 있습니다.

예를 들어 사용자가 기기 카메라로 사진을 캡처하기를 바라는 경우 그런 작업을 수행하는 다른 앱이 있을 가능성이 높습니다.그러면 사진을 캡처하는 액티비티를 직접 개발하는 대신 여러분의 앱에서 그 앱을 사용하면 됩니다.카메라 앱의 코드를 포함하거나 링크할 필요도 없습니다.

 

대신 사진을 캡처하는 카메라 앱에서 액티비티를 시작하기만 하면 됩니다.작업이 완료되면 사진이 앱으로 반환되기까지 하여 바로 사용할 수 있습니다.사용자에게는 마치 카메라가 앱의 일부분인 것처럼 보입니다.

 

시스템이 구성 요소를 시작할 때 그 앱에 대한 프로세스를 시작하고(이미 실행 중이지 않은 경우) 해당 구성요소에 필요한 클래스를 인스턴스화합니다.

 

예를 들어 여러분의 앱이 카메라 앱 내에서 사진을 캡처하는 액티비티를 시작하면 해당 액티비티는 여러분 앱의 프로세스가 아니라 앱에 속한 프로세스에서 실행됩니다. 그러므로 대부분의 다른 시스템에서 실행되는 앱과 달리 Android 앱은 단일한 진입 지점이 없습니다.(예를 들어 main() 함수가 없음)

 

시스템이 다른 앱에 대한 액세스를 제한하는 파일 권한을 가지고 각 앱을 별도의 프로세스에서 실행하기 때문에 여러분의 앱은 다른 앱에서 직접 구성 요소를 활성화할 수 없습니다. 다만 Android 시스템으로는 이것이 가능합니다.

 

다른 앱에 있는 구성 요소를 활성화하려면 시스템에 메시지를 전달하여 특정 구성 요소를 시작하고자 하는 인텐트을 밝혀야 합니다. 그러면 시스템이 대신 해당 구성 요소를 활성화해줍니다.

 

구글 안드로이드 콘텐츠 제공자는 파일 시스템, SQLite 데이터베이스, 웹상이나 앱이 액세스할 수 있는 다른 모든 영구 저장 위치에 저장 가능한 앱 데이터의 공유형 집합을 관리한다.

 

반응형

관련글 더보기