Android: comment supprimer complètement un service fonctionnant séparément en tant que processus d'arrière-plan?
J'ai une application qui a une Activité, qui est utilisé comme la régulière GUI, et un Service. Mon activité a que deux boutons. Un bouton pour arrêter le processus, et l'une pour tuer le processus. J'utilise ces méthodes, respectivement, de démarrer et d'arrêter mon processus:
Intent i = null;
Button start;
Button stop;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
i = new Intent(this, Service.class);
start = (Button) findViewbyId(R.id.start_button);
stop = (Button) findViewById(R.id.stop_button);
start.setOnClickListener(new OnClickListener(){
public void onClick(){
startService(i);
}
}
stop.setOnClickListener(new OnClickListener(){
public void onClick(){
stopService(i);
}
}
}
Ce Service n'est pas lié à la actvivty ou de l'application. J'ai le service configuré dans le Manifeste de la manière suivante:
<service
android:name="com.example.mypackage.Service"
android:process=":remote">
<intent-filter>
<action
android:name="com.example.mypackage.Service" />
</intent-filter>
</service>
Quand j'ai démarrer le Service, il fonctionne sur son propre indépendante sur quoi que ce soit d'autre. Sens, lorsque je démarre le service et onDestroy()
l'application, le service est toujours en cours d'exécution. Je peux voir qu'il est toujours en cours d'exécution parce que grâce à adb
je lance le ps
commande et il dit qu'il est.
Le problème est quand je l'appelle stopService(intent)
. Quand je l'appelle stopService(intent)
de l'activité côté, il va exécuter les lignes de code, défini dans la onDestroy()
du service, mais quand je lance ps
par adb
il dit qu'il est toujours en cours.
Je veux être en mesure de détruire COMPLÈTEMENT le service. Je ne suis pas sûr de la façon dont les services du travail, de sorte s'il vous plaît, n'hésitez pas à parler de rattrapage. Je ne sais pas si ça a à voir avec ce que je fais dans le service ou pas. Merci!
EDIT:
Lorsque je démarre le service, j'utilise le onStartCommand()
et exécuter du code qui il ne. J'ai aussi le retour START_STICKY
de onStartCommand()
. J'ai aussi essayé de retourner START_NOT_STICKY
et le service est toujours en cours après que j'appelle startService(intent)
.
source d'informationauteur Rob Avery IV
Vous devez vous connecter pour publier un commentaire.
Si vous voulez tuer les processus du service avec force, vous pouvez utiliser le code suivant:
Services sont arrêtés après stopService est appelé. Après l'arrêt, ils sont inactifs, mais mis en cache.
Par android documentation qu'ils deviennent une processus vide:
Service restera dans la mémoire cache jusqu'à ce qu'il sera appelé par vous de nouveau l'application ou de système de cache n'aurez pas de place pour le garder. RS commande ne sais pas la différence entre l'actif et le cache dprocess et toujours montre tous les awailible processus. Ce comportement va maintenir si vous supprimez
:remote
(notez que processus distinct ne sera pas créé)Je pense que vous pourriez mettre en
android:exported="false"
dans votre manifeste, pour que d'autres applications ne peuvent pas accéder au service de ainsi la service de. J'ai peut-être besoin de voir la pleine mise en œuvre de votre code pour en déterminer la cause. J'ai fait la même chose et il fonctionne parfaitement bien.