Intern
Wat is het verschil tussen een achtergrondservice en een achtergrondservice in Android?
sobes.tech AI
Antwoord van AI
Het verschil tussen een normale achtergrondservice en een beperkte (restricted) achtergrondservice verscheen met Android 8.0 (API 26).
Normale achtergrondservice:
- Kan onbeperkt in de achtergrond werken.
- Het systeem kan het beëindigen bij gebrek aan bronnen, maar het kan opnieuw worden gestart als
START_STICKYwordt geretourneerd inonStartCommand(). - Vereist geen zichtbare meldingen voor de gebruiker (hoewel dit niet de beste praktijk is vanuit UX-oogpunt).
- Kan aanzienlijke bronnen van batterij en CPU verbruiken.
Beperkte achtergrondservice (toepasselijke beperkingen):
- Een service gestart in de achtergrond zonder zichtbare activiteiten of andere "witte lijsten" (geprivilegieerde voorwaarden) ondervindt beperkingen in resourcegebruik.
- De belangrijkste beperkingen omvatten:
- Beperking op werking in de achtergrond: Het systeem kan de service na korte tijd (meestal enkele minuten) stoppen nadat de app naar de achtergrond is gegaan.
- Verbod op het starten van nieuwe achtergrondservices: Een app in de achtergrond kan geen nieuwe achtergrondservices starten met
startService(). In plaats daarvan moetenJobSchedulerofWorkManagerworden gebruikt. - Beperking op het ontvangen van broadcast-berichten: Impliciete broadcasts in de manifest worden genegeerd. De app moet expliciet broadcast-ontvangers registreren of
JobScheduler/WorkManagergebruiken om gebeurtenissen te verwerken.
- Het doel van deze beperkingen is om de batterijduur en de prestaties van het apparaat te verbeteren door irrationeel gebruik van bronnen door achtergrondapplicaties te beperken.
Hoe een service niet beperkt wordt (actief volgens het systeem):
- De app bevindt zich op de voorgrond (de gebruiker interacteert actief met de app).
- De app start een zichtbare service (foreground service), die een constante melding aan de gebruiker toont.
- De app voert specifieke taken uit (bijvoorbeeld het verwerken van broadcast-berichten, uitvoeren van
JobScheduler-taken), die haar tijdelijk uit de volledige irrationele achtergrondstatus halen.
Belangrijkste verschil: Met Android 8.0 en hoger wordt een service die in de achtergrond draait zonder zichtbare activiteit van de gebruiker of zichtbare service, door het systeem beperkt in termen van toegang tot bronnen en de mogelijkheid om langdurig te werken.