W jakich okolicznościach używanie AIDL do definiowania interfejsu usługi byłoby właściwą decyzją (a nie tylko tworzeniem rozszerzenia do klasy service
)?Kiedy korzystać z usługi opartej na pomocy?
Odpowiedz
Samo rozszerzenie klasy usług nie pozwoli Twojej usłudze na ujawnienie swoich metod podmiotom zewnętrznym. Jeśli chcesz, aby twoja usługa była eksponowana/używana przez kod, na który skończy się twoja aplikacja na Androida, musisz zdefiniować dla niej swój AIDL. Ten AIDL zostanie udostępniony i zostanie utworzony jako umowa o świadczenie usługi. Odwołaj się do tego http://developer.android.com/guide/components/aidl.html.
Musisz użyć AIDL, jeśli chcesz, aby klasa spoza procesu aplikacji uzyskała dostęp do Usługi. Jeśli korzystasz z tej usługi tylko z poziomu aplikacji, możesz użyć numeru local service.
1. w przypadku korzystania z usługi opartej na pomocy.
Kilka korzyści można osiągnąć przez części segmentu kodu do użytku backend:
- DECOUPLE front-end i backend
- pamięci/cpu intensywne przetwarzanie może być ułożone do służby zaplecza, GC w służbie nie wpłynie na doświadczenie użytkownika frontonu
- serwis awaria nie obniżą całą APP
2.Jak stworzyć taką usługę
Pisałem dobrą bibliotekę, można odnieść jako przykład http://github.com/zhchang/hogwarts
AIDL
Interfejs Android Definition Language (AIDL) umożliwia programistom zdefiniowanie interfejsu programowania że stosowanie klient i serwer komunikować się ze sobą za pomocą komunikacji między procesami (IPC).
W tym artykule pokazano, jak połączyć się z działającą usługą w systemie Android i jak pobrać dane z usługi zdalnej/uruchomionej.
Przykład mechanizmu IPC
Let RemoteService być obsługa klienta i RemoteServiceClient być aktywny, aby komunikować się ze zdalną obsługą.
Jedna usługa zawiera informacje o operacjach matematycznych, takich jak dodawanie, odejmowanie i mnożenie dla danych dwóch liczb całkowitych. Aby udostępnić funkcjonalność usługi, możesz utworzyć plik .aidl w katalogu projektu.
Ale zakładając, że tylko Twoja aplikacja korzysta z usługi, nie ma powodów, by używać aidl - czy to prawda? – MalcomTucker
Prawidłowo. Ale w takim razie, dlaczego chciałbyś stworzyć usługę w tym przypadku? –
Stworzyłem usługę lokalną w mojej aplikacji, aby pobrać większy plik. W ten sposób mógłbym mieć trochę więcej kontroli i bezpieczeństwa niż zadanie asynchroniczne, które można zabić za każdym razem. Jak rozumiem, usługa, która jest związana z działaniem, nie może zostać zabita, jeśli zasoby są ograniczone. – Janusz