10

Jestem trochę zdezorientowany na temat intentService. Dokumenty mówią, że jeśli wyślesz intentService wiele zadań (intencji), to wykonasz je jeden po drugim w jednym osobnym wątku. Moje pytanie brzmi - czy możliwe jest posiadanie wielu wątków intentService w tym samym czasie, czy nie? Jak odróżnić kod od utworzenia trzech różnych intencji na tej samej intentService (ten sam wątek) lub trzech oddzielnych intentServices, z których każda ma swój własny wątek i jedną intencję do wykonania?Android: wiele intentservices lub jedna intentservice z wieloma intencjami?

Innymi słowy, gdy wykonujesz polecenie startService (intent), czy umieszczasz intencję w pojedynczej kolejce, czy też za każdym razem uruchamia nową kolejkę?

Intent someIntent1 = new Intent(this, myIntentService.class); 
Intent someIntent2 = new Intent(this, myIntentService.class); 
Intent someIntent3 = new Intent(this, myIntentService.class); 
startService(someIntent1); 
startService(someIntent2); 
startService(someIntent3); 

Odpowiedz

9

1) Czy jest możliwe aby mieć wiele wątków intentService w tym samym czasie, czy też nie?

Nie, każda usługa IntentService ma tylko jedną wartość: HandlerThread, której używa do wykonywania żądań w kolejności wywołania "startService". Chyba że z jakiegoś powodu zdecydujesz się odrodzić własny wątek/wątki w IntentService, ale to prawdopodobnie zniszczy cel korzystania z IntentService w pierwszej kolejności. Usługi tego samego oświadczenia manifestu, tj. Nazwa usługi = ". MyIntentService" (i to jest to samo w przypadku normalnych Usług) uruchamiane są jako pojedyncze w ramach ich procesu, więc dopóki Usługa nie zostanie zabita, ta sama Usługa otrzyma dodatkowe żądania uruchomienia.

2) Jak odróżnić kod od utworzenia trzech różnych intencji na tej samej IntentService?

Aby rozróżnić żądania, użyj systemu intent zgodnie z przeznaczeniem! Podaj różne "Akcje" dla różnych zadań, które może wykonywać dana usługa, i przekaż dodatkowe dodatki, które IntentService musi uruchomić poprawnie dla tego konkretnego zadania jako dodatki w obiekcie Intent, którego używasz do uruchomienia Usługi.

+0

Jeśli używam różnych intentservices takich jak: Intent someIntent1 = new Intent (this, myIntentService1.class); Intent someIntent2 = new Intent (this, myIntentService2.class); Intent someIntent3 = new Intent (this, myIntentService3.class); StartService (someIntent1); StartService (someIntent2); StartService (someIntent3); czy nadal działają w tym samym handlerThread? – Jon

+3

Tak, wszystkie żądania uruchomienia usługi rozpoczną się od funkcji HANDLEIntent() w kolejności wywołania funkcji startService dla każdego obiektu zamiaru. Tak więc, w zasadzie ustawiasz w kolejce trzy "zadania" dla usługi Intent, aby działały w kolejce. Gdy onHandleIntent() zakończy działanie/lub zostanie zablokowany przez bieżącą operację, zostanie trafiony przez kolejną prośbę startService (Intent intent), którą ustawiłeś w kolejce. Gdy wszystkie zadania "startService" zostaną zakończone, usługa intencji się wyłączy, ponieważ to leżący u jej podstaw Handler nie ma już komunikatów do "obsługi". – Submersed

+0

@pskink to naprawdę pytanie, ponieważ jeśli trzy usługi tworzą trzy wątki, to naprawdę nie ma sposobu na "stawianie w kolejce" zadań na tym samym handlerThread, a jeśli tak, to nie rozumiem co rozumieją autorzy dev kiedy mówią o tym w kolejce. – Jon