J'ai commencé un premier plan de service.
J'ai pris soin de retourner START_STICKY de onStartCommand
.
J'ai observé que le premier plan de services de ne pas exécuter indéfiniment, mais sont régulièrement dénoncé par un Androïde interne module appelé l' RestartProcessManager
. Essentiellement un processus LRU est maintenu et le nouveau service suspendu obtient à nouveau prévues si il est configuré pour le faire(collant ou pas).
La question que je me pose est comment le redémarrage est en cours de traitement. Logcat indique le service de l'intention a été livré, mais a échoué parce que le "processus qui est mauvais"
Après avoir écumé par d'autres sources que j'ai été amené à croire qu'il y a une fuite de mémoire dans mon service. Pour valider cette affirmation, j'ai créé une vanille de premier plan de services qui n'ont rien fait d'autres que journal d'une déclaration lors d' onStartCommand
sein de la même application. Cela aussi a observé le même problème.
Essayé exactement la même chose dans un nouveau projet (avec un nouveau nom de package évidemment) et le redémarrage du service fonctionnait parfaitement bien. Aussi, je simule un redémarrage en cliquant sur la croix rouge située en dessous de la studio->logcat (qui tue essentiellement le processus). De toute façon, le service d'intention a été livré avec succès cette fois, et le service est en place et fonctionne à nouveau. Je suppose qu'il pourrait être une des dépendances dans mon projet qui pourrait déconner, d'une certaine manière. J'ai répliqué les dépendances dans le nouveau projet et il a continué à fonctionner comme prévu.
Maintenant, c'est là que ça devient absurde. - Je changer le nom du package dans le buggy projet et je ne rencontre pas le problème de plus. J'aurais contenté de ce qu'un correctif parce que j'ai passé près de 2 jours, le diagnostic de cette, mais en changeant le nom du package n'est pas possible pour moi que mon application est déjà publiée.
Edit 1: je dois mentionner que j'ai déjà observé ce actuellement sur mon appareil équipé d'Oreo(plus de 5)
Edit-2: Le service s'exécutant dans le même processus que celui de l'application. Et j'ai inclus le logcat dump ainsi.
02-15 14:26:50.850 1395 1445 D RestartProcessManager: updateSelf : com.ambee, size : 30
02-15 14:26:50.852 1395 1445 D RestartProcessManager: com.ambee got score 26.17240489145331 in DayDuration for duration : 525176
02-15 14:26:50.853 1395 1445 D RestartProcessManager: com.ambee got score 99.80218232889891 in DayLRU for LRU diff : 47707034
02-15 14:26:50.853 1395 1445 D RestartProcessManager: com.ambee got score 90.9090909090909 in DayLaunchTimes for launch times : 10
02-15 14:26:50.854 1395 1445 D RestartProcessManager: com.ambee : X : 2727.272727272727, Y : 785.1721467435993, Z : 2994.0654698669673
02-15 14:26:51.082 1395 1445 I ActivityManager: Killing 13839:com.ambee/u0a260 (adj 200): [BgDetect][RNK] kill com.ambee (uid 10260) usage 4
02-15 14:26:51.083 1395 1445 D ActivityManager: Process com.ambee has 1 services
02-15 14:26:51.083 1395 1445 W ActivityManager: Scheduling restart of crashed service com.ambee/.vson.LinkService in 10996ms
02-15 14:26:51.084 1395 1445 D EmbryoManager: prepare com.ambee user 0
02-15 14:26:51.099 3710 3710 D NotificationListener: onNotificationRemoved# hash: 68226270 sbn: StatusBarNotification(pkg=com.ambee user=UserHandle{0} id=903 tag=null key=0|com.ambee|903|null|10260: Notification(channel=default pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0x72 color=0x00000000 actions=2 vis=PRIVATE))
02-15 14:26:54.121 1395 1444 I ActivityManager: Start proc 22570:com.ambee/u0a260 for embryo com.ambee
02-15 14:26:54.121 1395 1444 D Embryo_Uterus: Embryo created.com.ambee, pid=22570
02-15 14:26:54.796 22570 22570 D Embryo : preload com.ambee, 10ms, hwui=true, layout=false, decor=false
02-15 14:27:02.084 1395 1445 W ActivityManager: Unable to launch app com.ambee/10260 for service Intent { cmp=com.ambee/.vson.LinkService }: process is bad
02-15 14:27:04.214 1395 1444 D Embryo_Uterus: rank:63, com.ambee, 35767806