0

Android developer guide 상태 :내부적으로 사용되는 데이터베이스에 ContentProvider를 구현하는 오버 헤드를 피할 수 있습니까?

당신은 하지 않으려면 자신의 공급자를 개발하지 않아도 다른 응용 프로그램과 데이터를 공유 할 수 있습니다.

그래서 내가이있는 경우 SQLite는 DB가 (피 상용구 코드 작성의 많은 데) 다음 컨텐트 프로가 필요하지 말아야 응용 프로그램에 완전히 로컬로 사용,하지만 난 뭐죠 "안드로이드"얻을 didnt는 것을 알 수있다 백그라운드에서이 DB를 쿼리하는 방법?

로더는 비동기 적으로 데이터를로드하는 것을 쉽게 : (의 적은 오버 헤드로 가능한 한 바퀴를 다시 발명과)

이 작업이 docs에 sateted으로 Loaders을 위해 어떤 것을 보일 수 있습니다 활동 또는 조각.

하지만, 밖으로 가장 가까운 서브 클래스를이 작업을 수행 할 수 Loader의 어떤 서브 클래스가 없다 - CursorLoaderContentResolver와 결합 할 desgined된다. 그래서, 나는 무엇인가 놓치고 있냐? Loader의 타사 구현이 있습니까? 아니면 다른 접근 방식이 있습니까?

감사합니다.

답변

2

"백그라운드에서이 DB를 쿼리하는"Android의 방법은 무엇일까요?

원하는대로. AsyncTask을 사용하십시오. 일반 Thread을 사용하십시오. IntentService을 사용하십시오. 선호하는 ORM에 비동기 옵션이 있는지 확인하거나 RxJava/RxAndroid 등에 연결하십시오.

IOW, 단일 "Android"방식은 없습니다.

은이 작업이 로더는 문서에 sateted으로,위한 것입니다 것처럼 보일 수 있습니다

Loader 당신이 UI 레이어를 원하는 경우에만 관련이 상당히 데이터베이스와 작동하는 직접.Activity 또는 Fragment과 함께 Loader 만 사용할 수 있습니다.

내가 누락 된 항목이 있습니까?

당신은 아마도 영감의 원천으로 CursorLoader에 소스 코드를 사용하여, 직접 SQLite는 함께 작동 AsyncTaskLoader의 자신의 서브 클래스를 작성하실 수 있습니다.

한번, 일을 한 것으로 않습니다 로더의 타사 구현이있다. 그러나 I discontinued it.

+0

그렇다면 백그라운드에서 데이터베이스를 쿼리해야하고 작업 라이프 사이클 및 동기화를 처리하기 위해 번거 로움을 원할 때 로더 하위 클래스가 해당 작업에 적합하지 않다는 결론을 얻었습니까? –

+0

@OfekRon : 앱마다 매우 다양합니다. 또한, 개별 프로젝트의 경우, 단순히'Loader' 전체 계약을 존중하지 않는 자신 만의'DatabaseLoader'를 생성하고 싶다면 그렇게 할 수 있습니다. 전체 계약을 존중할 수 없어 도서관 이용자를 오도하고 싶지 않아서 도서관을 판매하지 못했습니다. 그러나 로더 외에도 스레드와 유지 된 단편 또는 쓰레드와'onRetainNonConfigurationInstance()'또는 POJO 데이터베이스 관리자 등을 사용할 수 있습니다. 실제로 앱의 성격, 전반적인 UI 아키텍처 등에 따라 다릅니다. – CommonsWare

1

Loader은 ActivityProvider, 네트워크 또는 많은 수의 숫자를 처리해야하는 모든 종류의 데이터를 비동기 적으로로드하는 데 사용할 수있는 활동주기에 후크하는 메커니즘입니다.

CursorLoader이 실제로 상속하는 AsyncTaskLoader이라는 기본 로더가 있습니다. 이것은 로더의 기본 레벨 기능을 제공하는 데 사용할 수 있습니다. 로드해야하는 데이터 모델 을 구현 한 다음 AsyncTaskLoader#loadInBackground() 메서드를 구현하면됩니다. 이 경우 데이터베이스를 쿼리 한 다음 원하는 형식으로 결과를 반환합니다. 아마도이 경우에 Cursor을 반환하고 싶지는 않지만, 예를 들어 Cursor에 행을 나타내는 Pojo를 만들고 싶을 수도 있습니다.

빠른 구현으로 ContentResolver을 사용하는 대신 데이터베이스에서 CursorLoader's source code을 쿼리 할 수 ​​있습니다.

0

컨텐트 프로에 대한 필요가 없습니다 당신이 다른 프로세스 (응용 프로그램)을하지

  • 주 데이터를 할 경우;

  • 빌드 앱 위젯;

  • Android 빠른 검색 창에 자신의 추천 검색어를 통합하십시오.

... 자동 UI 업데이트로 멋진 동기화 및 쿼리 데이터를 원하지 않습니다.

실제로 DB 작업 읽기/쓰기는 AsyncTaskLoader (활동주기를 고려한 AsyncTask)로 래핑 할 수 있습니다. 또한보기를 업데이트하기 위해 자신의 옵저버를 구현해야합니다 (data binding을 사용하는 또 다른 옵션).

관련 문제