0

데이터베이스 프레임 워크를 구현하는 "안드로이드 방식"은 무엇입니까?Android 데이터베이스 모범 사례?

두 가지 목표 : "데이터베이스"는 네트워크를 통해 SQLite는 데이터베이스 또는 뭔가를 할 수 있도록

  1. 그것은 충분히 포괄적이어야한다.
  2. 멀티 스레드 안전해야합니다. (업데이트 : "스레드 안전"이란 기본 UI 스레드에서 실행해서는 안되며 데이터베이스 호출이 서로 충돌해서는 안되며 시스템은 결과를 기본 UI 스레드로 다시 전달하는 방법을 알아야합니다.
  3. 업데이트 :

    1. 사용에게 LoaderManager를 쿼리 : 그것은 (전화 방향 변경과 같은) 구성 변경에 대해 알아야 할

    이 내가 여기에서 수집 및 안드로이드 문서 한 것입니다 데이터.

  4. ContentProvider 만들기 (1 & 2 스레드를 안전하게 만듭니다.)
  5. ContentProvider와 데이터간에 추가 클래스를 추가하십시오.

그러나 데이터 작성, 업데이트 및 삭제는 어떻게해야합니까? 제가 말할 수있는 한 LoaderManager는 질의만을위한 것입니다. AsyncQueryHandler를 사용해야합니까?

업데이트 : AsyncQueryHandler는 구성 변경 사항을 알지 못합니다. 나는 파편이 갈 길이라는 것을 읽었습니다. 또는 ... AsyncQueryHandler 구현이 구성 변경을 처리하는지 확인해야합니다.

+0

(목표 1) : 매우 어렵지만 예, ContentProvider는 로컬 sqlite 데이터베이스 대신 원격 데이터베이스의 콘텐츠를 제공 할 수 있습니다. 좋은 추상화 같은 소리가 난다 – zapl

+0

나는이 모든 것이 나에게 단편적인 것처럼 보인다고 생각한다. 모든 CRUD를 처리하는 하나의 LoaderManager를 기대했습니다. –

+0

로더의 포인트는 데이터를 주 스레드에 비동기 적으로로드하는 유틸리티라는 것입니다. 그들은 C, U 또는 D로 무엇이든 할 의도가 없습니다. R (eading)을 돕는 것뿐입니다. Android의 기존 추상화 시스템을 고수하려면 ContentProvider를 사용하십시오. 이는 모든 종류의 데이터베이스에만 국한되지 않는 일반 CRUD 인터페이스이기 때문입니다. – zapl

답변

1

(1)은 매우 쉽습니다. ContentProvider와 모든 하위 레벨 CRUD를 구현하는 데이터 사이에 별도의 클래스를 추가하기 만하면됩니다. 예를 들어 하나의 클래스가 sqlite 데이터베이스를 처리 할 수 ​​있으며 동일한 인터페이스를 가진 다른 클래스가 Google 드라이브 백엔드를 처리 할 수 ​​있습니다.

은 몇 가지 조사를 수행 한 후, 여기에 당신이 처리 할 수있는 방법 (2)와 (3) 안드로이드 클래스와 :

  • AsyncTask를 - 당신이 것을 작성해야하므로 불행하게도, AsyncTask를이 구성 변경에 대해 알고하지 않습니다 너 자신 (그리고 그것은 추악해진다).
  • headless fragments - UI가없는 프래그먼트. 기본적으로 자신의 AsyncTaskLoader를 작성해야 포인트를 무너 뜨릴 수 있습니다. 데이터를로드하도록 설계

로더를 이동하는 방법이 될 것으로 보인다하지만 당신은 삽입/업데이트를 처리하는 로더를 해킹 할 수 -

  • AsyncTaskLoader이 (여기 http://blogactivity.wordpress.com/2011/09/01/proper-use-of-asynctask/ 참조). (loadInBackground() 메서드에서 원하는대로 할 수 있습니다.)

    catch는 HoneyComb보다 먼저 모든 로더가 스레드 풀을 공유하여 요청을 병렬로 처리합니다. (HoneyComb 이후, Loader는 순차적으로 작업을 실행합니다.) 이것은 곧바로 실행되는 작업이 순서대로 실행되지 않을뿐만 아니라 멀티 스레딩을 올바르게 처리하지 않으면 데이터 일관성 문제가 있다는 것을 의미합니다.

    데이터베이스를 업데이트하는 백그라운드에서 서비스를 실행중인 경우 Honeycomb 이후의 멀티 스레딩에 대해 걱정할 필요가 있습니다.

    결론은 "데이터베이스 호출이 서로 충돌하지 않아야합니다"라는 문제를 추상화하는 Android 프레임 워크가없는 것입니다. 당신은 스스로 처리해야합니다.

  • 관련 문제