콘텐츠 제공자가 애플리케이션간에 데이터를 공개적으로 공유 할 수 있도록 만들어 졌다는 것을 이해합니다. 그러나 누군가가 자신의 앱 내에서 사용하도록 콘텐츠 제공 업체를 만드는 것에 대해 생각하고 있는지 궁금합니다. 이렇게하면 어떤 이점이 있습니까? 단점이 있습니까?
과거에는 데이터베이스의 데이터에 액세스하기 위해 SQliteOpenHelper를 구현했지만 콘텐츠 공급자를 만드는 것을 고려하고 있습니다. 데이터 요청에 대한 URI 접근 방식이 명확하고 간결하다고 생각합니다. 반면에 내 애플리케이션에만 콘텐츠 제공 업체를 사용하면 중복되고 (내에 SQliteOpenHelper 클래스가 있기 때문에) 필요한 것보다 더 많은 작업을 할 수 있습니까?
답변
데이터를 공유 할 계획이 없다면 콘텐츠 제공 업체에 대해 생각하지 마십시오. 강력하지만 작성하기 어렵고 내부적으로 사용한다면 구현하는 것은 어리석은 일입니다.
그러나 누군가가 자신의 앱 내에서 사용하도록 콘텐츠 제공 업체를 만드는 것에 대해 생각하고 있는지 궁금합니다.
물론 … 예를 들어 내가 작성한 오래된 TODO 목록 앱의 경우 다른 앱이 작업 상태를 검색하고 액세스 할 수 있도록 콘텐츠 제공 업체를 작성해야했습니다. 요구 사항의 일부 였지만 그 이상으로 의미가 있었고 앱을 더 멋지게 만들었습니다.
답변
공개 할 생각이 ContentProvider
없더라도 a를 사용하는 것이 확실히 좋은 생각이라고 생각합니다 .
내부적으로 쉽게 변경할 수 있도록 데이터에 대한 추가 추상화 수준을 제공하는 것이 좋습니다. 나중에 기본 데이터베이스 구조를 변경하기로 결정하면 어떻게됩니까? a를 사용하면 ContentProvider
그 안에 모든 구조적 변경 사항을 포함 할 수 있습니다. 마치 하나를 사용하지 않는 것처럼 구조적 변경의 영향을받는 코드의 모든 영역을 변경해야합니다. 게다가 데이터베이스에 대한 낮은 수준의 액세스로 코드를 흩 뜨리는 대신 데이터 액세스에 동일한 표준 API를 재사용 할 수 있다는 점이 좋습니다.
또한 미래에 데이터를 노출하고 싶을 가능성이 항상 있습니다. ContentProvider
선불을 사용하지 않으면 나중에 다시 장착하기가 훨씬 더 어려울 것입니다.
그런 다음 ContentProvider
s를 사용할 때 SyncAdapter
및 예를 들어 데이터 액세스를 포함하는 앱 위젯을 원하는 경우 와 같이 ‘가 필요 / 권장되는 Android의 다른 부분이 있습니다.
요약하자면, 미리 작성하는 데 드는 오버 헤드가 매우 적 ContentProvider
으므로 (어쨌든 좋은 아이디어 인 API를 배운 후에는) 개인 데이터에 대해서도 그렇게하는 것이 합리적입니다.
답변
Eclipse 용 MOTODEV Studio를 살펴보십시오. Eclipse를 확장하는 개발 환경입니다. 데이터베이스에 대한 콘텐츠 제공자를 자동으로 생성 할 수있는 도구가 있습니다. 콘텐츠 제공자가 데이터에 더 쉽게 액세스 할 수 있고 성능에 큰 영향을 미치지 않는 경우 계속해서 사용하십시오. 대부분의 시나리오에서 이것이 사실입니다.
답변
즉, 데이터를 효과적으로 관리하는Content Providers
데 도움이됩니다 . 다음과 같은 이유로 사용하는 것이 좋습니다.
- UI와 데이터베이스 사이 의 추상화 계층 역할을 합니다 . ContentProviders에서 데이터 유효성 검사 를 구현 하여 사용자가 입력 한 데이터의 유효성을 검사 할 수 있습니다 . 또한 UI 및 기타 부분을 건드리지 않고도 데이터베이스 의 구조 를 수정할 수 있습니다 .
- 그들은 같은 다른 안드로이드 프레임 워크 클래스 와 잘 어울립니다
SyncAdapter
. 예를 들어, ContentProviders와 함께 사용하여 데이터베이스의 값이 변경되면 목록을 자동으로 새로 고칠 수 있습니다CursorLoader
. ContentProviders가 없으면 이와 같은 많은 기능을 직접 구현해야합니다. - 개인 데이터를 다른 앱에 안전하게 노출 할 수 있습니다 . ContentProviders를 사용하면 데이터를 다른 앱과 쉽고 안전하게 공유 할 수 있습니다.
따라서 지금 이러한 기능이 필요하지 않더라도 향후에 필요할 수 있으며 추가 작업을 수행하여 지금 바로 구현하는 것이 좋습니다.
답변
ContentProviders는 이해하기가 조금 어렵지만 내부적으로 앱을 사용하려는 경우에도 확실히 도움이된다는 데 동의합니다. 가장 좋은 점은 적절한 URI에 대한 콘텐츠 제공 업체를 사용자 지정할 수 있다는 것입니다.
다음은 데이터베이스에 5 개의 테이블이있을 수 있지만 일부를 사용하기 전에 특정 순서로 조인해야하는 시나리오입니다. 그리고 이러한 각 조인에 대한 콘텐츠 URI를 만듭니다. 그런 다음 각각 이러한 URI를 테이블로 사용할 수 있습니다. 🙂
콘텐츠 제공 업체와 함께 진행하는 것이 좋습니다. 얼마나 강력한 지 놀랄 것입니다.
답변
내 관점에서 콘텐츠 제공자는 다른 앱과 데이터를 공유하는 것만으로도 많은 이점을 제공합니다. Sync-Adapter를 사용하여 서버와 동기화해야하는 경우, Google 클라우드 메시징을 사용하고, DB의 기본 데이터가 로더를 사용하여 변경 될 때 UI를 자동 업데이트하고, 검색을 구현하고, 위젯을 사용합니다. 그러면 콘텐츠 제공자가 적합합니다.
언젠가는 콘텐츠 제공 업체에 첨부 된 위 기능 중 일부를 구현해야 할 수도 있으므로에 대한 지침을 따르는 것이 좋습니다.
그런데 콘텐츠 제공자 생성기를 사용하여 5 분 이내에 데이터베이스와 CP를 신속하게 구축 할 수 있습니다.
답변
문서에서 말했듯이 :
콘텐츠 제공자 만들기
사용이 전적으로 자체 응용 프로그램 내에서 사용되는 경우 SQLite 데이터베이스를 사용하기 위해 공급자가 필요하지 않습니다.
그렇다면 왜이 오버 헤드를 개발해야할까요? 더 쉽고 빠른 개발을 원하십니까? 따라서 하나의 추상화 계층 (SQLiteOpenHelper 하위 항목)이면 충분합니다.
Occam ‘s Razor를 참조하십시오
. 정당한 이유없이 엔티티를 만들지 마십시오.