2010-08-23 20 views
27

Pracuję nad małym projektem Android, w którym konieczne jest udostępnienie niektórych danych pomiędzy kilkoma działaniami i usługą, która działa w oddzielnym procesie. Chciałbym tylko wiedzieć, jakie są moje możliwości w zakresie udostępniania danych? Klasa aplikacji? IPC? Oparte na plikach? Transmisje? Dzięki chłopaki!Udostępnianie danych między działaniami i usługami

Odpowiedz

51

1. Wygląda na to, że musisz przekazać pewne informacje. Będziesz mógł ustawić odbiorniki telewizyjne w dowolnej działalności/usłudze, z której chcesz otrzymywać powiadomienia.

Read more on-line o Broadcastreceiver io send broadcast

2. Jak przekazać dane między działaniami/usługami w ramach jednej aplikacji?

To zależy od rodzaju danych, które chcesz udostępnić:

prymitywnych typów danych Aby udostępnić prymitywne danych pomiędzy Inne/Usługi w aplikacji, należy użyć Intent.putExtras(). Aby przekazać prymitywne dane, które muszą pozostać, należy użyć mechanizmu składowania Preferences.

Nietrwałe Przedmioty do dzielenia złożonych zakaz trwałych obiektów zdefiniowanych przez użytkownika na krótki okres, następujące metody są zalecane:

klasy android.app.Application

Android .app.Aplikacja jest klasą podstawową dla tych, którzy potrzebują utrzymania globalnego stanu aplikacji. Dostęp do niego można uzyskać za pośrednictwem funkcji getApplication() z dowolnej aktywności lub usługi. Ma kilka metod cyklu życia i będzie automatycznie tworzona przez system Android, jeśli zarejestrujesz go w AndroidManifest.xml.

publiczne statyczne pole/metoda

Alternatywny sposób, aby dane dostępne w całej Inne/Usługi jest użycie publicznych statycznych pól i/lub metod. Możesz uzyskać dostęp do tych pól statycznych z dowolnej innej klasy w swojej aplikacji. Aby udostępnić obiekt, działanie, które tworzy obiekt, ustawia statyczne pole do wskazania tego obiektu, a każda inna aktywność, która chce użyć tego obiektu, po prostu uzyskuje dostęp do tego statycznego pola.

HashMap z WeakReferences do obiektów

Można również użyć HashMap z WeakReferences do obiektów z długimi kluczami. Gdy działanie chce przekazać obiekt do innej czynności, po prostu umieszcza obiekt na mapie i wysyła klucz (który jest unikalnym długim na podstawie licznika lub znacznika czasu) do aktywności odbiorcy za pomocą dodatków intencyjnych. Aktywność odbiorcy pobiera obiekt za pomocą tego klucza.

pojedyncza klasa

Istnieją zalety stosowania statycznych Singleton, takich jak można odnosić się do nich bez rzucania getApplication() do klasy specyficzne dla aplikacji, czy będzie kłopotów z wiszących interfejs na wszystkich podklasach aplikacji, aby zamiast tego różne moduły mogły odwoływać się do tego interfejsu.

Ale cykl życia statku nie znajduje się pod Twoją kontrolą; tak aby przestrzegać modelu cyklu życia, klasa aplikacja powinna inicjować i zburzyć te statycznych obiektów w onCreate() i OnTerminate() metody klasy Application

Trwałe obiekty Nawet gdy pojawi się aplikacja do kontynuować działanie, system może zabić swój proces i ponownie go uruchomić. Jeśli masz dane, które musisz utrwalić z jednego wywołania działania do następnego, musisz reprezentować te dane jako stan, który zostanie zapisany przez działanie, gdy zostanie poinformowany, że może zniknąć.

do dzielenia złożonych trwałych obiektów zdefiniowanych przez użytkownika, następujące metody są zalecane:

Application Preferences 
Files 
contentProviders 
SQLite DB 

Jeśli udostępniony dane muszą być przechowywane w poprzek punktach, w których proces aplikacji może zostać zabity, a następnie umieścić te dane w trwałe przechowywanie, takie jak Preferencje aplikacji, SQLite DB, pliki lub dostawcy treści. Proszę zapoznać się z Data Storage w celu uzyskania dalszych informacji na temat korzystania z tych składników.

+1

Wow, dziękuję bardzo za tę bardzo pouczającą odpowiedź. – Jack

+1

dlaczego marnować tyle pamięci w abstrakcjach. Czy nie ma opcji dla danych globalnych. Dlaczego faceci java/android marnują tak dużo pamięci – mSO

+0

usługi i działalność są uruchamiane jako różne procesy, więc nie dzielą się pamięcią, więc większość z wyżej wymienionych sugestii nie będzie działać. – whoami

Powiązane problemy