2013-01-16 11 views
7

Jestem nowy w domenie andriod i znajduje się w fazie uczenia się. Mam kilka pytań:Używanie ContentResolver

Czy mamy pojedynczy obiekt ContentResolver na aplikację? Czy to obiekt singletonowy? Kto zarządza cyklem życia obiektu? Jeśli jest to singleton, w jaki sposób obsługuje wiele żądań kwerendy do ContentProvider?

Odpowiedz

14

Alex Lockwood Blog - http://www.androiddesignpatterns.com/2012/06/content-resolvers-and-content-providers.html

Jaka jest zawartość Resolwer?

Program Content Resolver jest pojedynczą, globalną instancją w aplikacji , która zapewnia dostęp do dostawców treści (i innych aplikacji). Program Content Resolver zachowuje się dokładnie tak, jak wskazuje jego nazwa: : akceptuje żądania od klientów i rozwiązuje te żądania , kierując je do dostawcy treści z odrębnymi uprawnieniami. W tym celu narzędzie Content Resolver przechowuje odwzorowanie od uprawnień do dostawców treści na poziomie . Ta konstrukcja jest ważna, ponieważ umożliwia prosty i bezpieczny dostęp do dostawców treści innych aplikacji.

Program Content Resolver zawiera metody CRUD (tworzenie, odczytywanie, aktualizowanie, usuwanie) metod odpowiadających metodom abstrakcyjnym (wstawianie, usuwanie, zapytanie, aktualizacja ) w klasie Dostawca treści. Program Content Resolver nie obsługuje implementacji dostawców treści, z którymi współpracuje (ani nie musi tego wiedzieć); każdej metodzie jest przekazywany identyfikator URI, który określa dostawcę treści do interakcji.

Co to jest dostawca treści?

natomiast zawartość Resolwer stanowi abstrakcję od dostawców Zawartość aplikacji , dostawców treści dostarcza abstrakcję od źródle danych (czyli bazy danych SQLite). Zapewniają one mechanizmy definiujące bezpieczeństwo danych (tj. Wymuszając uprawnienia do odczytu/zapisu na poziomie ) i oferują standardowy interfejs łączący dane w jednym procesie z kodem uruchomionym w innym procesie.

Dostawcy treści udostępniają interfejs do publikowania i konsumowania danych w oparciu o prosty model adresowania URI przy użyciu schematu treści: // . Umożliwiają one zdwojenie warstw aplikacji z warstw danych bazowych , co powoduje, że agnostyk źródłowy danych aplikacji jest agnostyczny, pobierając podstawowe źródło danych.

życiu Query

Więc co dokładnie jest procesem za pomocą prostego zapytania krok po kroku? Jak opisano powyżej, podczas wysyłania zapytań do danych z bazy danych za pośrednictwem dostawcy treści , nie komunikuje się bezpośrednio z dostawcą. Zamiast tego używasz obiektu Content Resolver do komunikowania się z dostawcą .Konkretna sekwencja zdarzeń, które występuje, gdy zapytanie jest wykonana jest podany poniżej:

  • składa Wywołanie getContentResolver().query(Uri, String, String, String, String). Wywołanie wywołuje metodę Content Resolver o nazwie
    , a nie ContentProvider's.

  • Po wywołaniu metody query narzędzie do rozpoznawania zawartości analizuje argument uri i wyodrębnia jego uprawnienie.

  • Program Resolver zawartości kieruje żądanie do dostawcy treści zarejestrowanego z (unikatowym) uprawnieniem. Dokonuje się tego, wywołując metodę dostawcy treści dostawcy treści:
    .

  • Po wywołaniu metody Content Provider's query kwerenda jest wykonywana i zwracany jest kursor (lub zgłaszany jest wyjątek). Zachowanie wynikające z tego zależy całkowicie od implementacji dostawcy treści przez dostawcę zawartości.