Est-il de toute façon à créer un processus d'arrière-plan de service qui sera exécuté si oui ou non l'application créé, il est toujours en cours d'exécution?
Donc, je veux que mon application pour créer un Service qui sera d'abord exécuter en arrière-plan et faire quelques trucs. Ce processus d'arrière-plan ne s'arrêteront jamais. Il sera constamment garder en cours d'exécution. La SEULE façon que les processus d'arrière-plan peut être créée ou détruite par l'entremise de l'application. Je comprends qu'il ya des possibilités infinies pour tuer un processus. Je suppose que je veux que mon application pour être en mesure de me dire si oui ou non le processus est en cours d'exécution et de récupérer des informations en temps réel à partir de ce processus. Parallèlement à cela, être capable de démarrer et/ou de détruire le processus d'arrière-plan.
Donc, disons que vous ouvrez l'application et commencer/créer le service. Même lorsque vous fermez/terminal/appel onDestroy pour l'application, je tiens à ce que les processus d'arrière-plan en cours d'exécution. Le seul moyen de détruire ce service serait de ré-ouvrir/re-créer l'application, et de le détruire.
Ne Android, quelque chose comme ça? Est-il un moyen de contourner ce problème?
J'allais créer un IntentService
et le faire tourner une boucle infinie. Cependant, mon seul problème est de savoir comment obtenir les informations de l' IntentService
. De ce que j'ai appris, un IntentService
est créé et se tue elle-même quand il est fait.
Je suis encore nouveau pour Android, donc n'hésitez pas à être précis et/ou de réparation.
OriginalL'auteur Rob Avery IV | 2013-11-25
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin de faire 2 applications pour que, en fait, si votre exigence est d'être en mesure d'arrêter ou de créer le service de l'application principale il ne fera que compliquer les choses (comme que vous n'avez pas besoin de aidl à tous, depuis ses tous dans la même application) , qui va pour la réponse ci-dessus (ne répondre encore!).
Il suffit de créer l'application et le service en classe, même sur la même formule que les autres activités. Puis sur le manifeste xml inscrire le service de ce genre à l'application d'un nœud:
Ce que vous faites avec le android:process=":à distance" de la balise est de définir explicitement le service s'exécute dans un processus différent (par le nom de "distant") que dans le reste de l'application, tout en étant toujours de la partie.
Ensuite, pour démarrer et arrêter tout simplement l'utilisation de ces de votre activité:
·
·
·
Assurez-vous de lire la documentation sur les services (et broadcastreceivers) de toute façon, mais qui vous donnera une idée générale de l'endroit où le but et de ne PAS faire à compliquer.
J'ai travaillé avec les services de ces derniers temps, donc im fraîche sur la question, si vous avez des questions faites le moi savoir ici!
<<<<<<<<<<<< EDIT : >>>>>>>>>>>>>>>
Ah je crois que je vous maintenant.. si vous ne voulez que le service de continuer à courir après le "app" est fini oublier :partie à distance. De cette façon, ils vont tous les deux partagent le même cycle de vie des applications (mais pas du contexte du cycle de vie comme ils l'ont fait différente), désolé si la partie confus et merci pour le vote!.
Oui, en gros.
Je vous recommande ce tutoriel: vogella.com/articles/AndroidServices/article.html son assez bon, et jusqu'à la date
Vous pouvez même définir un broadcastreceiver pour gérer BOOT_COMPLETED et démarrer le service pour s'assurer de son exécution après le redémarrage de l'appareil. Tous que sans l'application en cours d'exécution. Juste rappelez-vous que même si le service et les autres actions menées dans les différents processus, ce service est encore lié à l'application par le manifeste. Comme vous pouvez le deviner services sont assez puissant, mais vous avez besoin pour gérer leur droit et seulement d'étendre leurs fonctionnalités à votre nu requeriments, parce que sinon, il peut drainer la batterie et/ou les ressources de façon assez rapide.
Une autre chose est qu'un service peut être arrêté par le système android tout moment, il est "nécessaire" (tels que des fuites de mémoire qui j'ai testé ainsi que le système de batterie vie de tous les jours qui peut également affecter).
OriginalL'auteur SuppressWarnings
Réponse est assez simple.
Service
(pasIntentService
, juste un simpleService
) et le démarrage de votre activité. IntentService ne fonctionne pas dans votre cas, qu'il appellerastopSelf()
sur elle-même dès que vous revenez deonHandleIntent()
stopSelf()
méthode. Mais dans de faibles conditions de mémoire, la plate-forme peut tuer vos services d'arrière-plan. Lorsque l'appareil dispose de suffisamment de mémoire plate-forme permet de redémarrer votre service fourni vous faire à votre service COLLANT en retournantSTART_STICKY
dans onStartCommand().stopService()
de votre activité en cas de besoin. Il n'a pas d'importance, même si votre activité s'est arrêté/tués et redémarré.Espère que cela répond à votre question.
OriginalL'auteur Santosh
Juste faire 2 applications. un service et une une appli. (depuis le service & l'exécution de l'application sur le " UI " thread).. de Cette façon, vous avez deux processus distincts. Utilisation aidl de communiquer entre les deux.. n'utiliserait pas l'intention de services, ceux-ci sont censés être de courte durée.
le problème, c'est que le système d'exploitation peut toujours tuer le service si l'OS a besoin de ressources, de sorte qu'il n'est pas possible pour votre application de tuer un service. la création d'une autre "application" qui est juste un service semble assez stupides et inutiles, parce que vous pouvez le démarrer et l'arrêter dans un app
Je comprends qu'il ya des possibilités infinies pour tuer un processus. Je suppose que je veux que mon application pour être en mesure de me dire si oui ou non le processus est en cours d'exécution et de récupérer des informations en temps réel à partir de ce processus. Parallèlement à cela, être capable de démarrer et/ou de détruire le processus d'arrière-plan.
vous pouvez le faire très bien par le démarrage du service normalement dans votre application et de la liaison à ce service
OriginalL'auteur Chrispix
La solution, l'utilisateur SupressWarnings vous a donné est correct, sauf que vous serez en forçant le Service s'exécute dans un processus distinct, et je ne pense pas que vous serez intéressé. Il va seulement vous aider à garder votre service de fonctionner même après le processus principal meurt (probablement en raison d'une Exception non gérée), mais le fait est que le processus principal ne devrait jamais mourir si vous disposez d'un service en cours d'exécution. Et le problème avec le fait d'avoir à votre service dans une autre VM processus est que vous allez perdre la capacité à utiliser le même espace de mémoire, de sorte que les singletons, statistiques, variables, etc., ne fonctionne pas comme prévu. Et de plus, tous les appels à partir des principaux processus pour les processus de service sera sérialisé par le liant mécanisme qui s'engage dans la vitesse de sanctions et limites les données sérialisées de ne pas aller au-delà de 1 MO (ce qui pourrait arriver si vous passez un grand tableau d'octets par exemple).
Donc, mon opinion est que vous devez utiliser le SupressWarnings solution sans le android:processus d'attribut.
Probablement ce qu'il n'a pas vous dire, c'est que vous doit s'étendre de la classe de Service au lieu de IntentService. Et puis, vous devez remplacer le onstartcommand méthode et de mettre en œuvre votre logique. Lire la Android officielle de la documentation et il va vous aider à mieux comprendre le concept de Service.
OriginalL'auteur Leandro Glossman
J'ai rencontré le même problème et je l'ai corrigé en appelant
startForeground()
dans mononStartCommand()
régulièreService
, pasIntentService
. Je vous recommande de les faire passer à un régulièreService
comme mentionné ci-dessus.Voici mon code. Appeler cette méthode dans votre
onStartCommand()
:OriginalL'auteur jaytj95