J'ai une application assez complexe -Comment traquer les fuites de mémoire - Trouver des références de vie
L'activité de l'interface utilisateur lance un service et met en place 2 voies callbacks AIDL si les deux peuvent communiquer.
Le service s'exécute pour toujours (sauf si le bouton 'off' est désactivé dans l'activité de l'interface utilisateur).
Le problème est que lorsque l'utilisateur quitte l'activité, la mémoire d'activité n'est pas libérée. -La quantité de mémoire utilisée par mon application est la même, même si l'activité de l'interface utilisateur a été fermée. -Le segment de mémoire affiche toujours mapTiles et d'autres conneries de l'interface utilisateur même si l'activité de l'interface utilisateur a été fermée.
Donc, je suppose que le Service détient des références à l'activité. Je connais les nombreux articles mettant en garde contre la fuite du contexte d'activité. Le service référence uniquement l'activité via une référence faible stockée dans la portée de l'application. (une classe qui étend l'application)
Y a-t-il un moyen de trouver ce qu'est spécifiquement le référencement de l'activité? L'arbre du dominateur montre des mappages de mapTiles et de ListView qui mangent toute ma mémoire ... mais je ne trouve pas la référence à l'activité qui maintient ces choses en vie.
En outre, est-il un moyen de vider une chose de vidage de tas de HPROF si OutOfMemoryException se produit?
Lorsque je fais Menu -> Applications -> Services en cours d'exécution. Il montre que com.myapp a 15 Mo. J'aurais pensé sortir de l'activité (flèche de retour) et ensuite jouer un peu au téléphone, l'activité serait ramassée et le nombre diminuerait. Ça ne le fait jamais. – paulpooch
Cet écran est spécifique aux services. Votre activité démarre un service et ce service correspond à ce que vous voyez en utilisant ces 15 Mo de mémoire. Ce service ne s'arrête pas lorsque vous quittez l'activité. Il est géré par l'OS pour être arrêté si nécessaire. Par exemple, j'ai actuellement des services qui fonctionnent depuis plus de 48 heures ... la dernière fois que j'ai redémarré mon téléphone. À l'intérieur de votre code de service, vous pouvez choisir d'arrêter/démarrer ce service comme vous le souhaitez. – user432209
Ok - bien, il est bon de savoir que l'écran est spécifique à la classe de service. Y a-t-il un gestionnaire de tâches? Comment puis-je savoir quelle quantité de RAM utilise l'activité? – paulpooch