Le processus du service est tué après l'application est supprimée de l'application du bac
Je suis en train de créer un service (ou re-démarrage de l'exécution d'un service) lorsqu'une activité est lancé à l'aide de :
Intent intent = new Intent(this, MyService.class);
startService(intent);
Plus tard, sur la base de certaines mesures, la même activité se lie au service de l'aide
bindService(new Intent(this, MyService.class), mConnection, Context.BIND_AUTO_CREATE);
Et lorsque l'activité est détruite, j'appelle
unbindService(mConnection);
Plus tôt, le service utilisé pour redémarrer quand j'ai tué la même activité/de l'application de l'application du bac et a montré le "message 1 processus 1 service en cours d'exécution" en vertu de l'exécution des applications.
Maintenant, le service de ne pas redémarrer sur le meurtre de la même activité/de l'application.
Et je reçois le message "0 processus 1 service en cours d'exécution", ce qui signifie que le service est effectivement pas en cours d'exécution.
Le service ne permet pas le redémarrage de l'application en cours de fermeture. Ma demande consiste en une activité. Le service est démarré avec succès quand il est lancé après l'initialisation du système.
Pourquoi le processus du service se fait tuer quand je le démarre à l'aide de startService() ??
modifier
Le service utilisé pour re-commencer plus tôt après que j'ai fermé l'application à partir de l'application bac. Mais maintenant, tout d'un coup avec le MÊME code, il ne le fait pas. Il se produit avec d'autres applications trop quand je les ferme. par exemple.
- J'ai signalé un semblable (mais pas exactement les mêmes), le problème et les solutions de contournement ici: Problème 178057: Processus tué lors de la tâche supprimée tandis que lié au service, avec BIND_AUTO_CREATE drapeau. Vous pouvez voter pour elle pour essayer de le faire réparer.
- Qu'entendez-vous par plus Tôt, le service utilisé pour redémarrer? Comment plus tôt.
Vous devez vous connecter pour publier un commentaire.
Voici une solution de contournement, je suis tombé sur et fonctionne bien pour le re-démarrage d'un service si son processus est tué sur la fermeture de l'application. Dans votre service, ajoutez le code suivant.
Je suis tombé sur cette solution de contournement dans cette fil.
Semble être un bug que le processus de l'application est tué. Il n'y a pas de point pour un service à terme, si le processus est tué.
S'il vous plaît être conscient que: onDestroy n'est pas toujours appelée. Vous ne devriez pas mettre de code de cette façon.
Lorsque l'activité de fermeture forcée ou de fermeture par système anormalement, onDestroy n'est pas appelé.
Malheureusement, c'est un problème compliqué en raison de la façon dont Android fonctionne. Il y a un certain nombre de stratégies que chaque travail autour de différentes parties du problème. Pour de meilleurs résultats, combiner plusieurs stratégies d'ensemble.
Noter que certaines de ces stratégies peut ne plus être nécessaire dans les plus récentes versions d'Android.
1. Le démarrage de l'activité
Quoi faire
Prises de De premier plan de services tué lors de la réception de diffusion après acitivty glissé loin dans la liste des tâches:
(Si votre service est dans un processus différent, alors cette activité est procédé à la même).
Effets secondaires
Causes les récents activité à proximité. Normalement, le balayage d'une application ne permet pas de fermer les récents activité.
Inconvénients
Cela ne prend effet quand le mannequin le début de l'activité, qui peut prendre une demi-seconde ou plus, donc cela laisse tout de même le service ouvert à être tué pour un peu.
Explication
Lorsque vous supprimez/faites glisser votre application à l'écart, un indicateur appelé
waitingToKill
est ensemble. Alors que cet indicateur est défini, Android peut tuer le processus à n'importe quel moment dans le futur, comme lorsque vous recevez une émission. Le démarrage d'une activité efface ce drapeau.2. Spam un
BroadcastReceiver
avec au premier plan des émissionsQuoi faire
De fusion dans votre code de service:
Créer un mannequin récepteur de radiodiffusion:
Ajouter le récepteur à votre manifeste:
Effets secondaires
Peut causer une légère (~250ms) retard/de blocage lorsque la tâche est supprimée de l'récents de l'écran.
Inconvénients
Ce ne garde que les processus en vie alors que c'est la réception des émissions. la
waitingToKill
drapeau est toujours, de sorte que le processus peut encore être tué par la suite, comme lorsqu'une émission est reçue.Explication
Si le processus n'est pas en cours d'exécution dans la priorité de premier plan, Android va essayer de le tuer immédiatement. La réception de premier plan des émissions empêche temporairement ce, résultant dans la
waitingToKill
drapeau a été mis à la place.3. Ne pas se lier à des services de
La liaison à un service semble augmenter la probabilité de processus du service d'être tué immédiatement lorsqu'une tâche est supprimée.
Je sais que cette question est vieux, mais j'ai récemment été confronté à ce problème et tout à coup, mon service arrêtée à la clôture de l'app. Auparavant, il a été fonctionne correctement. Ce problème a perdu mon beaucoup de temps. Pour les autres qui ont le même problème assurez-vous que VOS DONNÉES d'arrière-plan de RESTRICTION EST ÉTEINT.
C'était le problème que j'ai eu et il fait réellement sens que lorsque les données d'arrière-plan est Limité processus d'arrière-plan ne fonctionne pas.
onDestroy n'est pas toujours appelée. Le Principal problème dans votre cas est ur impossible de démarrer le service lors de l'application fermée,que le temps système d'exploitation android(Dans Certains OS) va tuer le service de, Si vous n'êtes pas en mesure de redémarrer le service, appeler une alarme mangeoire pour démarrer le reciver comme ça,
Manifeste est,
Principale Activité de début de l'alarme de manger de cette façon,
cela appel reciver et reciver est,
Et ce Alaram reciver appelle une fois lors de l'application android est ouvert, et lorsque l'application est fermée.AINSI, le service est comme ça,
quand il n'y a pas de liaison à un service ou bien établies premier plan puis android système de reconnaître le service utilisé la surcharge du service qui devrait être fermé. Ici est la meilleure façon de garder votre service, même si l'application est fermée: AlarmManager ou d'un Service