1. Dostawcy treści nie są bezpieczni wątkowo
Domyślnie dostawcy zawartości nie są bezpieczni wątkowo. Jeśli masz wiele wątków korzystających z dostawcy zawartości, możesz zobaczyć wiele różnych wyjątków i innych niespójności danych. Najłatwiejszym sposobem rozwiązania tego problemu jest użycie słowa kluczowego synchronized w każdej z metod publicznych udostępnianych przez dostawcę zawartości.
W ten sposób tylko jeden wątek naraz może uzyskać dostęp do tych metod.
2. Baw się dobrze, robiąc dużo tekstów
W nowej aplikacji Serval Maps mam potrzebę importowania danych z plików binarnych do bazy danych używanej wewnętrznie przez aplikację. Aby to zrobić i dobrze bawić się resztą aplikacji, najlepiej:
Stwórz nowy wątek, który podejmie import, aby nie wpływać niekorzystnie na inne wątki, w szczególności wątek odpowiedzialny za aktualizację interfejsu użytkownika; i Wstrzymaj na chwilę na końcu każdego importu, aby dać innym wątkom, które muszą używać zsynchronizowanych metod, większe szanse.
3. Dostawcy treści zmuszają Cię czasem do myślenia bocznego
Sposób, w jaki działają dostawcy zawartości w systemie Android, polega na zapewnieniu warstwy abstrakcji między resztą kodu a podstawową bazą danych. Wynika to głównie z faktu, o ile wiem, że dostawcy treści mają dostęp do danych z innych miejsc niż bazy danych.
Oznacza to, że nie można wykonywać surowych zapytań SQL w bazowej bazie danych i trzeba określić różne składniki zapytania SQL za pomocą zmiennych przekazywanych do różnych metod, takich jak metoda zapytania. Jeśli masz zadanie, które nie pasuje do sposobu, w jaki SQL jest obsługiwany przez dostawcę treści, masz dwie możliwości:
Pomyśl z boku o zapytaniu, być może możesz uzyskać potrzebne dane za pomocą alternatywnych zapytań i dostępu do wyników za pomocą kursora; i Użyj identyfikatora URI do normalnego uzyskiwania dostępu do danych oraz specjalnego identyfikatora URI, który jest dopasowany do określonego zapytania dla tych zadań, które nie mają alternatyw.