Comment redémarrer automatiquement un service, même si l'utilisateur de la force de la fermer?
Je veux un service de courir tout le temps dans mon application. Donc, je veux redémarrer, même si elle est fermée de force par l'utilisateur. Il y a certainement une façon de le faire que les applications comme facebook le font.(Ce n'est pas fait à l'aide de notification push, facebook redémarrage de son service, même si internet est désactivé).
Toute aide serait appréciée. Merci!
- utilisez-vous le service d'arrière-plan...
- Faire un autre service qui va commencer la première un ou en faire un récepteur qui sur n'importe quel événement vérifie si le service est disponible, si non, il va démarrer.
- Vous peut-être à votre service pour l'exécution de tous les temps, mais le fait que les utilisateurs sont de force de fermeture, cela signifie qu'ils ne le font pas. Si l'application est destinée à un usage public, veuillez reconsidérer cette exigence
- la réponse a résolu votre problème finalement ?
- Avez-vous résolu ce problème?
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, il est vraiment très mauvais modèle pour exécuter le service avec force l'encontre de l'utilisateur de la volonté de.
De toute façon, vous pouvez le redémarrer en utilisant un
BroadcastReceiver
qui s'occupe de l'émission envoyé à partir deonDestroy()
de votre service.StickyService.java
RestartServiceReceiver.java
Déclarer la composants dans le manifeste fichier:
Démarrer le
StickyService
dans un Composant (c'est à direApplication
,Activity
,Fragment
):OU
Vous devez créer un
sticky service
substitueronTaskRemoved
méthode, où vous pouvez définir une alarme de service pour déclencher votre code à nouveau.Également dans certains appareils comme Xiaomi, Huwaei l'application obtient fermée de force une fois qu'il est retiré de applications récentes. C'est parce que les fabricants ont le gestionnaire des tâches de fonctionnalités qui améliorent la ram/performances de la batterie.
Vous pouvez consulter ce lien pour plus d'informations: https://stackoverflow.com/a/41360159/2798289
Chaque fois qu'un service est tué, son
onDestroy
méthode est toujours appelée.Il est mieux d'utiliser un BroadcastReceiver votre service lorsqu'il est tué.
Voici un exemple de code illustrant sa mise en œuvre:-
Puis enregistrer un récepteur dans
AndroidManifest.xml
:-Enfin,créer un BroadcastReceiver,et de commencer à votre service dans le
onReceive
méthode:-Espère que cette aide.
Que par l'Android document
Sur Forcer l'arrêt de l'application, Android il suffit de tuer le processus d'identification. Pas de mises en garde, des rappels sont donnés pour le service et/ou d'activités. Comme par le Android document, Lorsque l'application est tué il y a des chances qu'il appelle onPause().
Quand j'ai essayé dans mon application, même onPause() n'a pas été appelé. Je pense que le seul moyen est l'utilisation de l'
FLAG_INCLUDE_STOPPED_PACKAGES
intention du drapeau et de l'envoyer à partir d'une autre applicationsur le service de l'startCommand de retour de méthode START_STICKY. généralement il dire à l'OS à démarrer le service lorsqu'il est tué.
Si je comprends bien, alors, effectivement ce n'est pas possible, Android fonction pour forcer la fermeture de l'application a été conçue pour permettre à l'utilisateur de se débarrasser des applications indésirables, de sorte qu'il interdit toute activité jusqu'à ce que l'utilisateur commence à nouveau l'un de ses Activités.
Redémarrez le service, même si l'application est la force-arrêté et de continuer à fonctionner de service en arrière-plan, même après la fermeture de l'app Comment?
Si la situation le permet, l'utilisation de 'root', il est généralement possible de mettre en œuvre Humpty-Dumpty paradigme.
Votre application (1er) installe une autre application (2e, en prenant APK à partir d'actifs) et exécute le service de la 2ème application.
2ème application du service de lier le 1er service de l'app et le lie en cas de déconnexion. La 1ère application fait la même chose.
Sûr qu'il ne va pas aider lorsque toutes les applications sont tués par certains de RAM Libre ou une application similaire, mais quand Android tue l'un de ces deux, l'autre va redémarrer son homologue.
La seule véritable solution pour le maintien de services vivante de l'ist à l'appel
Service.startForeground(...)
avec une Notification. Ce sera la seule solution valable, toutes les autres seront très dépendant de la façon dont Google va changer le comportement de son système. Avec chaque mise à jour de l'API, Google pourrait empêcher tous les autres hack.Cela permet également à l'utilisateur courant, que votre application effectue une tâche de fond qui va garder l'application en vie et que l'utilisateur a à l'en empêcher. Si vous fournir à l'utilisateur la capacité de s'arrêter, c'est une partie de votre application, bien que.
Voir la Documentation:
Il y a une très hacky solution pour maintenir les services en cours d'exécution même vous la force de l'arrêter. Je ne recommande pas que, parce que c'est contre la volonté de l'utilisateur. Vous pouvez définir un récepteur de radiodiffusion de recevoir de l'intention à l'action X. onStartCommand gestionnaire de votre service, de diffusion X (si le service n'est pas encore commencé). sur le récepteur de radiodiffusion lors de la réception de X, tout d'abord démarrer le service, puis, le sommeil pour quelques minutes, et enfin re-diffusion X.
Je pense que la seule infaillible solution ici est d'avoir 2 services dans des processus distincts (
android:process="somecustomprocessname"
dans le manifeste, dans l'entrée de service) que les deux écoutent la radio et de redémarrer les uns des autres, parce qu'actuellement, l'INTERFACE utilisateur de ne pas laisser les utilisateurs tuer plusieurs processus en une seule action. Vous pouvez ensuite mettre en place un pinger fil dans chaque service, qui vérifie si l'autre service est en cours d'exécution toutes les 100 millisecondes, et si non, tente de redémarrer. Mais c'est de commencer à regarder de plus et de plus en plus de logiciels malveillants...