Android processus produit logcat “est mort” message très souvent.
Je suis en train de travailler sur une application qui s'exécute comme un service et attend un message. Après j'ai vérifier le journal, je trouve que Android tue et redémarre de nombreux processus très souvent! Cela ne se passe pas seulement à mon application, mais est le même pour de nombreux autres services.
Je ne vois aucune raison pour cela, et mon appareil dispose de suffisamment de mémoire. Je test avec un Sony Xperia S sous Android 4.0.4. Est-ce normal ou un bug?
Voici une partie du journal pour vous montrer ce que je veux dire:
02-04 15:02:38.791 320 332 je ActivityManager: Processus com.android.e-mail (pid 32763) est décédé.
02-04 15:02:38.791 320 332 W ActivityManager: le calendrier de redémarrage de s'est écrasé service com.android.e-mail/.service.MailService dans 5000ms
.... et 13 minutes plus tard :
02-04 15:15:32.601 320 694 je ActivityManager: Processus com.android.e-mail (pid 1453) est décédé.
OriginalL'auteur Aki | 2013-02-07
Vous devez vous connecter pour publier un commentaire.
C'est normal, le système d'exploitation ne présente régulièrement.
Pourquoi?
Chaque Application ou d'un Service lorsqu'il est inactif ou dans l'arrière-plan reste en mémoire jusqu'à ce que Android gestionnaire de mémoire décide qu'il est soit de prendre trop de mémoire pour rien, ou quand une autre application active/besoins du service. Par exemple, lorsque vous appuyez sur la
home
bouton lorsque vous êtes dans votre e-mail app. Il sera de retour à l'endroit exact où vous étiez lors de la ré-ouverture de l'application. Parce que cette application a été tout simplement mis en pause et en quelque sorte de mise en veille prolongée dans la mémoire. À moins que Android a besoin d'allouer de la mémoire pour rien au monde, il le conserve.Un moyen de vérifier que le système d'exploitation n'a pas de tuer votre service, est la création d'un persistant service.
Vous ne pouvez faire à votre service persistante si vous êtes système de développement d'applications. Ces services seront essentiellement de l'onu-tuables, et sont étiquetés comme "PERS" dans la sortie de la "adb shell dumpsys de l'activité de la commande".
http://www.androidguys.com/2009/09/09/diamonds-are-forever-services-are-not/
Mais:
Veuillez utiliser
AlarmManager
et unIntentService
, de sorte que votre service n'a pas besoin d'être dans la mémoire, sauf quand il est en train de faire un travail utile. Cela signifie aussi Android est plutôt rare de tuer votre service pendant que vous êtes dans la mémoire, et les utilisateurs risquent de tuer votre service parce qu'ils pensent que vous perdez la mémoire.C'est quelque chose que l'O/S décide quand le faire et pourquoi. Encore une fois, tout à fait normal. Je ne connais pas les détails de cette. Si vous n'êtes pas faire une application système, vous ne pouvez pas faire une persistant de service. Et vous devez l'utiliser AlarmManager et IntentService. De cette façon, Android ne sera pas de tuer votre service. Parce qu'il est effectivement utilisé whern dans la mémoire.
Tim. Si c'est une application de chat, vous devez maintenir le service en cours d'exécution. Mon service est se faire tuer fréquemment et avec de très gros temps - 3m-9m secondes
OriginalL'auteur Timmetje
Un plus possible la raison peut être due à la personnalisation de Fil.UncaughtExceptionHandler pour le thread principal.
Par défaut, le système d'exploitation Android va afficher une boîte de dialogue d'erreur si le processus est tué à cause de certains Exception non interceptée. Mais vous pouvez personnaliser Fil.UncaughtExceptionHandler et ne se propagent pas Exception à la Thread par défaut.UncaughtExceptionHandler, au lieu de cela, vous pouvez il suffit de tuer le processus. Alors vous ne verrez pas tous les messages d'erreur dans les logs, sauf
02-04 15:02:38.791 320 332 je ActivityManager: le Processus com.votre.app (pid 32763) est décédé.
et de votre processus de mourir en silence.
C'est moyen pratique si vous voulez simplement stocker Exception et ne pas afficher la boîte de dialogue d'erreur qui pourrait être le cas pour certains processus d'arrière-plan.
OriginalL'auteur Yuriy Ashaev