Android의 ContentProvider가 생성 된 이유는 무엇입니까?


11

제목은 내 질문을 요약하지만 기본적으로 내가 이해하고 싶은 것은 안드로이드 디자이너가 SQLite 데이터베이스에 직접 액세스하는 대신 공유 데이터로 작업 해야하는 앱이 콘텐츠 공급자를 사용하기를 원하는 이유입니다.

내가 생각할 수있는 유일한 이유는 특정 파일이 액세스 할 수있는 특정 파일 일 수 있기 때문에 보안입니다. 콘텐츠 제공자는 게이트 키퍼이므로 각 앱이 데이터베이스 파일에 대한 읽기 및 / 또는 쓰기 액세스를 허용하기 전에 적절한 권한을 갖도록합니다. 이것이 ContentProvider를 만든 주요 이유입니까?

답변:


6

무엇보다도 데이터 소비자와 데이터 공급자를 격리시키는 방법입니다. 일부 데이터를 공개하거나 최소한 다른 응용 프로그램에서 사용할 수있게하려면 자체 컨텐츠 제공자를 개발하거나 기존 컨텐츠 제공자를 확장하십시오.

사실 이것은 서버가 보안 관점에서 액세스를 제어 할 수 있지만 원할 때마다 데이터의 실제 구현을 재 작업 할 수있게합니다. 이 경우 콘텐츠 제공 업체의 백엔드를 조정하기 만하면됩니다. 데이터 소비자 응용 프로그램은 다시 작성할 필요가 없습니다. 실제 기본 구현의 변경 사항을 인식하지 못하고 컨텐츠 확인자를 통해 데이터에 계속 액세스합니다.

또한 Android는 여러 클라이언트가 데이터에 액세스하더라도 콘텐츠 제공자의 인스턴스를 하나만 인스턴스화하므로 신경 쓰지 않아도 동시 액세스를 처리합니다.

마지막으로, 그것은 클린 스타트 업 및 종료의 준설을 처리 할 것이라고 믿습니다.


1
단열재가 아마도 가장 좋은 대답이라고 생각합니다. 동시 액세스, SQLite 및 Android Java 인터페이스가 동시성을 처리한다는 점에 동의하지 않습니다 .ContentProvider 자체는 여러 동시 스레드가 쿼리 / 삽입 / 업데이트 할 수 있으므로 실제로는 아무것도하지 않습니다.
satur9nine

3

ContentProvider다른 외부 애플리케이션과 통신하기 위해 필요한 프로세스 간 통신 모두를 추상화한다. 이 코드를 직접 작성해야하는 것은 고통입니다.


타사는 항상 프로세스 간 통신없이 데이터베이스 파일에 직접 액세스 할 수 있습니다.
satur9nine

무슨 의미인지 잘 모르겠습니다 ... 앱이 "타사"인 경우 정의에 따라 다른 프로세스에 존재해야합니다 (모든 Android 앱에는 자체 주요 프로세스가 있기 때문에). 또한 Android OS에서 다른 응용 프로그램의 원시 데이터 저장소에 직접 액세스 할 수 있으면 꽤 큰 보안 문제가 발생할 수 있습니다.
Alex Lockwood

1

ContentProvider는 또한 데이터 저장 / 생성 방법에 대한 세부 정보를 숨기는 추상화입니다. 예를 들어 내 앱 중 하나에 PNG 이미지를 반환하는 콘텐츠 공급자가 있습니다. 이 이미지는 어디에도 저장되지 않으며 필요에 따라 생성됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.