To jest dość otwarte pytanie, ale pozwólcie, że rzucę okiem na to, jak najlepiej sprawdza się komunikacja między aplikacjami.
Jednym z kluczowych aspektów przesyłania wiadomości Android jest koncepcja luźnego powiązania wszystkich składników aplikacji. Ponieważ wszystkie aplikacje działają w oddzielnym procesie, a jedna "aplikacja" może składać się z kilku aplikacji (odpowiedzialnych za zapewnienie różnych działań lub usług), wszystkie techniki przesyłania wiadomości opierają się na idei przekazywania komunikatów przez granice procesów.
Intents
Preferowaną techniką wiadomości, zawsze staram się użyć Intent miarę możliwości. Jest to najbardziej "natywny" sposób przesyłania wiadomości w systemie Android.
Zalety
Korzystanie z intencjami do wiadomości utrzymuje luźne wiązanie komponentów aplikacji, pozwalając na przesyłanie wiadomości płynnie pomiędzy kilkoma aplikacjami. Intencje są używane w głównym systemie do uruchamiania działań i usług oraz do nadawania i odbierania zdarzeń systemowych.
Używanie dodatków Wiązki mogą zawierać pary klucz/wartość prymitywów jako dane ładunku w Intencjach, aby łatwo przekazywać informacje z jednego komponentu aplikacji do drugiego - nawet jeśli te komponenty działają w różnych procesach.
Wady
Ponieważ Intents są zaprojektowane, aby przejść między procesami, ładunek dodatki wspiera jedynie prymitywne typy. Jeśli chcesz wysłać obiekt za pomocą intencji, musisz go rozebrać na prymitywy na jednym końcu i zrekonstruować go na drugim.
Klasa Application
Jeśli chcesz tylko do komunikowania się w obrębie jednej aplikacji działającej w pojedynczym procesie jest to wygodne rozwiązanie.
Zalety
rozszerzając klasę Application
(i wdrożenia go jako Singleton) uzyskać obiekt, który będzie istniał gdy dowolnych komponentów aplikacji istnieje, zapewniając scentralizowane miejsce do przechowywania i przenoszenia złożonych danych obiektów między komponentami aplikacji.
Wady
Ta technika ogranicza wiadomości do elementów w jednej aplikacji.
usługi Binding, IPC i AIDL
Wiązanie z serwisu umożliwia dostęp do jego metod i obiektów wymiany z nim. AIDL jest sposobem definiowania sposobu serializacji obiektu na prymitywy systemu operacyjnego, tak aby można go było przekierowywać poza granice procesu, jeśli usługa, do której się łączysz, działa w oddzielnej aplikacji.
Zalety
Kiedy powiązanie z usługą masz dostęp do niego tak, jakby to był obiekt w obrębie klasy wywołującego. Oznacza to, że możesz uruchamiać metody w usłudze i wymieniać się z nim bogatymi obiektami.
Należy pamiętać, że jeśli wiążesz Usługę w innym procesie aplikacji, musisz utworzyć definicje AIDL, które powiedzą Androidowi, jak serwować/deserializować obiekty, które chcesz przekazać między aplikacjami.
Wady
Tworzenie klas AIDL dla IPC jest trochę dodatkowej pracy, a wiązanie tworzy dodatkowe zależności między usług i działań, które mogą utrudnić dla jądra, aby oczyścić zasobów, gdy inne aplikacje są poddawane zagłodzony.
Przekazywanie wiadomości przez granice procesów jest jednak kosztowne. Więc jeśli nie wykonujesz metod w Usłudze, używanie bindowania i IPC jest prawdopodobnie przesadą - zobacz, czy możesz osiągnąć to samo za pomocą Intents.
Gniazdka
Jeśli uciekania się do gniazd do komunikowania się wewnątrz lub pomiędzy aplikacjami działającymi na jednym urządzeniu, to albo dlatego, że nie ma innego sposobu lub przeoczyłeś trick gdzieś. Jeśli twoje wiadomości opuszczają urządzenie, gniazdka są dobrym, szybkim, alternatywnym rozwiązaniem. Jeśli pozostaniesz na urządzeniu, szanse na to, że Intents lub IPC będą lepszą opcją.
+1 to idealna odpowiedź, która może być używana jako standardowa odpowiedź w całej społeczności ..... – aProgrammer