Is de thread onStartCommand (..) van de IntentService veilig?

Ik heb een IntentService -klasse die vanuit verschillende plaatsen in een complexe toepassing kan worden gestart - Activiteiten, achtergrond Threads, andere services. Ik wil graag een teller bijhouden van hoe vaak de service is aangeroepen. Ik gebruik een private int-variabele binnen mijn IntentService-klasse om dat bij te houden, ik verhoog het van mijn onStartCommand (...) -methode.

Het kwam mij gewoon voor, omdat de onStartCommand (...) methode kan worden aangeroepen vanuit verschillende asynchrone threads, dat dit misschien geen threadveilige oplossing is. Dus de vraag is, moet ik de toegang tot deze tellervariabele in een gesynchroniseerd blok omzetten, of zorgt de IntentService-implementatie van onStartCommand (...) voor dit voor mij?

Als een notitie weet ik dat ik de variabele veilig kan verhogen van onHandleIntent (...) , maar ik heb een telling nodig van de werkelijke verzoeken en niet van de uitgevoerde intenties.

6

1 antwoord

Het kwam me net voor, omdat de onStartCommand (...) methode kan worden aangeroepen vanuit verschillende asynchrone threads, dat dit misschien geen threadveilige oplossing is.

onStartCommand() is always called on the main application thread in any service. You cannot be called with onStartCommand() in two threads simultaneously.

15
toegevoegd
@digitizedx: is wat niet thread veilig? onStartCommand() is, voor zover het alleen maar wordt aangeroepen op de hoofdtoepassingsreeks.
toegevoegd de auteur CommonsWare, de bron
Elke dag nieuwe dingen leren. Bedankt!
toegevoegd de auteur András Szepesházi, de bron
Dus het is niet thread veilig?
toegevoegd de auteur digitizedx, de bron
Sorry dat ik niet duidelijk was. Het heeft waarschijnlijk geen verband met deze vraag, ik heb ook een soortgelijk probleem, ik begin de dienst vanaf de uitzendontvanger. Op een gegeven moment krijg ik tegelijkertijd twee uitzendingen. Ik zie dat de onCreate() van de contentprovider die aan de applicatie is gekoppeld, tweemaal wordt aangeroepen. Dus ik ben aan het twijfelen dat startService niet threadsafe is omdat het probeert om de service twee keer te maken.
toegevoegd de auteur digitizedx, de bron