Question

J'ai une application avec une activity et un service.Si je tue le activity alors que le service est en marche, il se fait tuer aussi.Il est très important pour moi que le service n'a pas été tué.Comment faire pour que lorsque le système tue (ou je l'ai tuer en désactivant la "applications Récentes" liste"), la activity l' service reste actif jusqu'à ce qu'il termine son travail?Merci à l'avance!

Était-ce utile?

La solution

Il est très important pour moi que le service n'a pas été tué

Vos processus peut être tué à tout moment, pour toute raison, basée sur l'activité de l'utilisateur (le plus récent de la liste des tâches, un tiers gestionnaire des tâches, "Forcer l'Arrêt" dans les Paramètres, etc.) ou basé sur l'OS besoins (mémoire vive du système est faible).Vous ne pouvez pas l'en empêcher.

Vous pouvez prendre certaines mesures pour minimiser les chances de l'OS décidant de mettre fin à votre processus, comme l'utilisation de startForeground() sur le service, mais cela ne veut bloquer l'utilisateur de faire ce que veut l'utilisateur avec l'application du processus.

Je suis l'affichage d'une fenêtre à partir de ce service si le service s'arrête à la fenêtre disparaît.

Sans doute, l'utilisateur veut votre fenêtre à disparaître si l'utilisateur est expressément de se débarrasser de votre application via la récente liste de tâches, un gestionnaire de tâches, etc.Vous êtes bien sûr les bienvenus pour conseiller les utilisateurs dans votre documentation de tous les effets négatifs que cela pourrait avoir.

Vous êtes également les bienvenus à l'expérience d'avoir ce service soit dans un processus séparé.Ma compréhension est que cela ne va pas aider avec la récente liste des tâches sur Android 4.4, même si des versions antérieures d'Android.Si cela permet à des tiers de tâches gestionnaires dépend probablement sur le manager, et cela ne devrait pas aider à "Forcer l'Arrêt" à partir de paramètres.Cela signifie également que vous aurez à traiter avec l'IPC, l'augmentation de système de consommation de RAM alors que votre principal des processus et des services sont à la fois en cours d'exécution, etc.

Autres conseils

Vous pouvez essayer de retourner START_STICKY à partir de onStartCommand à votre Service:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    handleCommand(intent);
    // We want this service to continue running until it is explicitly
    // stopped, so return sticky.
    return START_STICKY;
}

Êtes-vous lié service?Si oui, alors le système va le tuer lors de la dernière activité du client se déconnecte (termine).Voici le texte de présentation de l' page de référence:

Lorsque le dernier client délie du service, le système détruit l' service (à moins que le service a également été démarré par startService()).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top