Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
Analyser les fuites de
mémoire dans une
application Android
Smart&Soft
Smart&Soft conçoit, réalise et pilote des applications mobiles pour smartphones,
tablettes, montres et TV conne...
Qui suis-je ?
Ludovic Roland
Responsable du pôle Android
Ingénieur en développement logiciel
Android, Windows Phone / Stor...
Introduction
➜ Des fuites de mémoire en Java ?
➜ Des conséquences bien présentes...
4
5
1. Les fausses solutions
2. Les requêtes OQL
3. L’histogramme
4. La bibliothèque LeakCanary
Plan Plan
1.
Les fausses
solutions
6
Les fausses solutions
➜ Le manifest
➜ try / catch tous les blocs de code qui peuvent être à l’origine d’une exception de t...
Trouver une vraie
solution avec MAT
8
Le logiciel indispensable...
➜ Eclipse Memory Analyzer (MAT)
➜ http://www.eclipse.org/mat/
9
Le processus de création du fichier hprof
1. Création d’un fichier hprof via Android Studio
a. Compilation de l’applicatio...
Le processus de création du fichier hprof (suite)
1. Création d’un fichier hprof via Android Studio (suite)
e. Génération ...
Le processus de création du fichier hprof (suite)
1. Création d’un fichier hprof via Android Studio (suite)
f. Transformat...
Présentation de la fuite de mémoire
public final class MainFragment
extends Fragment
{
private final BroadcastReceiver bro...
2.
Les requêtes OQL
14
OQL (Object Query Language) est une extension du
langage SQL pour base de données orientées objet
[...]
Wikipedia,
https:/...
A la recherche de la fuite de mémoire
1. Saisir la requête OQL et observer le résultat
2. Compter les fuites mémoire !
16
Comprendre la fuite de mémoire
1. Afficher le détail de la fuite mémoire
2. Observer, comprendre et interpréter le résulta...
Il faut savoir ce que l’on recherche !
18
Un langage complet
➜ SELECT * FROM com.smartnsoft.droid4me.app.Droid4mizer
➜ SELECT * FROM INSTANCEOF android.app.Activity...
3.
L’histogramme
20
A la recherche de la fuite de mémoire
1. Cliquer sur l’icône Histogram ( )
2. Filtrer avec le nom de package de votre appl...
Comprendre la fuite de mémoire
1. Afficher le détail de la fuite mémoire
2. Observer, comprendre et interpréter le résulta...
Vérifier la disparition de la fuite de mémoire
1. Filtrer avec le nom de package de votre application :
23
4.
La bibliothèque
LeakCanary
24
Présentation de la bibliothèque
➜ Bibliothèque permettant de détecter des fuites de mémoire lorsqu’un utilisateur navigue ...
Intégration de la bibliothèque
➜ Une dépendance dans le build.gradle :
➜ Dans l’application :
dependencies
{
testCompile '...
LeakCanary se manifeste de lui même...
➜ Affichage d’une notification en cas de
comportement suspect
➜ Affichage d’une tra...
LeakCanary affiche les détails...
➜ Il convient de cliquer sur la notification pour
ouvrir le détail de la potentielle fui...
LeakCanary affiche les détails… (suite)
29
Des questions ?
Plus d’informations sur notre blog :
https://medium.com/smart-soft
30
31
Ludovic Roland
Responsable du pôle Android
Ingénieur en développement logiciel
Android, Windows Phone / Store et
Window...
Smart&Soft
Siège social : 69, rue Saint Lazare – 75 009 - Paris
Bureaux : 45, rue Jean Jaurès – 92 300 - Levallois
contact...
Prochain SlideShare
Chargement dans…5
×

PAUG 03/05/2016 : Rechercher et analyser les fuites mémoires dans une application Android

620 vues

Publié le

Dans cette présentation au format cours, l'objectif est de sensibiliser les développeurs au fait que même si la mémoire en Java ça ne se gère pas comment en C, il convient tout de même de faire attention car les fuites mémoires existent et sont souvent à l'origine de l'exception OutOfMemoryError.

Nous verrons comment générer un fichier hprof afin d'analyser l'empreinte mémoire d'une application dans l'outil dédié MAT (Eclipse Memory Analyzer) et mettre en avant la présence ou non de fuite mémoire.

Une brève introduction à la bibliothèque leakcanary sera également faite. Il s'agit d'une bibliothèque permettant de détecter des fuites mémoire lorsqu’un utilisateur navigue au sein d’une application (très utile pour détecter des fuites mémoires pendant les phases de développement et de recette).

Publié dans : Mobile
  • Hello! Who wants to chat with me? Nu photos with me here http://bit.ly/helenswee
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
  • Soyez le premier à aimer ceci

PAUG 03/05/2016 : Rechercher et analyser les fuites mémoires dans une application Android

  1. 1. Analyser les fuites de mémoire dans une application Android
  2. 2. Smart&Soft Smart&Soft conçoit, réalise et pilote des applications mobiles pour smartphones, tablettes, montres et TV connectées. Nos références clients dans tous les secteurs d’activité Centré utilisateur Des applications performantes et de qualité Orienté performance Assurer la pérennité de vos applications avec des outils dédiés 2
  3. 3. Qui suis-je ? Ludovic Roland Responsable du pôle Android Ingénieur en développement logiciel Android, Windows Phone / Store et Windows 10. ludovic@smartnsoft.com @ludovicroland @smartnsoft 3
  4. 4. Introduction ➜ Des fuites de mémoire en Java ? ➜ Des conséquences bien présentes... 4
  5. 5. 5 1. Les fausses solutions 2. Les requêtes OQL 3. L’histogramme 4. La bibliothèque LeakCanary Plan Plan
  6. 6. 1. Les fausses solutions 6
  7. 7. Les fausses solutions ➜ Le manifest ➜ try / catch tous les blocs de code qui peuvent être à l’origine d’une exception de type OutOfMemoryError <application ... android:largeHeap= "true" ... > <!-- --> </application > 7
  8. 8. Trouver une vraie solution avec MAT 8
  9. 9. Le logiciel indispensable... ➜ Eclipse Memory Analyzer (MAT) ➜ http://www.eclipse.org/mat/ 9
  10. 10. Le processus de création du fichier hprof 1. Création d’un fichier hprof via Android Studio a. Compilation de l’application b. On navigue dans l’application (l’empreinte mémoire est visible dans l’onglet Android Monitor) c. On ferme l’application (bouton retour du téléphone) Ne pas tuer l’application ! d. On force le passage du Garbage Collector ( ) 10
  11. 11. Le processus de création du fichier hprof (suite) 1. Création d’un fichier hprof via Android Studio (suite) e. Génération du fichier hprof ( ) 11
  12. 12. Le processus de création du fichier hprof (suite) 1. Création d’un fichier hprof via Android Studio (suite) f. Transformation du fichier hprof dans un format “standard” g. Ouvrir le nouveau fichier hprof dans MAT 12
  13. 13. Présentation de la fuite de mémoire public final class MainFragment extends Fragment { private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { //TODO } }; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View view = inflater.inflate(R.layout.fragment_main, container, false); final IntentFilter intentFilter = new IntentFilter("TEST"); LocalBroadcastManager.getInstance(getContext()).registerReceiver(broadcastReceiver, intentFilter); return view; } } 13
  14. 14. 2. Les requêtes OQL 14
  15. 15. OQL (Object Query Language) est une extension du langage SQL pour base de données orientées objet [...] Wikipedia, https://fr.wikipedia.org/wiki/Object_Query_Language 15
  16. 16. A la recherche de la fuite de mémoire 1. Saisir la requête OQL et observer le résultat 2. Compter les fuites mémoire ! 16
  17. 17. Comprendre la fuite de mémoire 1. Afficher le détail de la fuite mémoire 2. Observer, comprendre et interpréter le résultat : 17
  18. 18. Il faut savoir ce que l’on recherche ! 18
  19. 19. Un langage complet ➜ SELECT * FROM com.smartnsoft.droid4me.app.Droid4mizer ➜ SELECT * FROM INSTANCEOF android.app.Activity a WHERE a.mDestroyed = true ➜ SELECT s.getValueAt(2) FROM int[] s WHERE (s.@length > 2) 19
  20. 20. 3. L’histogramme 20
  21. 21. A la recherche de la fuite de mémoire 1. Cliquer sur l’icône Histogram ( ) 2. Filtrer avec le nom de package de votre application : 21
  22. 22. Comprendre la fuite de mémoire 1. Afficher le détail de la fuite mémoire 2. Observer, comprendre et interpréter le résultat : 22
  23. 23. Vérifier la disparition de la fuite de mémoire 1. Filtrer avec le nom de package de votre application : 23
  24. 24. 4. La bibliothèque LeakCanary 24
  25. 25. Présentation de la bibliothèque ➜ Bibliothèque permettant de détecter des fuites de mémoire lorsqu’un utilisateur navigue au sein d’une application ➜ Open-source ➜ Créée par Square ➜ https://github.com/square/leakcanary 25
  26. 26. Intégration de la bibliothèque ➜ Une dépendance dans le build.gradle : ➜ Dans l’application : dependencies { testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.2.1' compile 'com.android.support:design:23.2.1' debugCompile 'com.squareup.leakcanary:leakcanary-android:1.4-beta2' releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2' testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2' } public final class CustomApplication extends Application { @Override public void onCreate () { super.onCreate() ; LeakCanary. install(this); } } 26
  27. 27. LeakCanary se manifeste de lui même... ➜ Affichage d’une notification en cas de comportement suspect ➜ Affichage d’une trace 04-13 14:22:00.864 16128-17526/fr.rolandl.myapplication D/LeakCanary: In fr. rolandl.myapplication:1.0:1. 04-13 14:22:00.864 16128-17526/fr.rolandl.myapplication D/LeakCanary: * fr. rolandl.myapplication.MainActivity has leaked: 04-13 14:22:00.864 16128-17526/fr.rolandl.myapplication D/LeakCanary: * GC ROOT static android.support.v4.content.LocalBroadcastManager.mInstance 04-13 14:22:00.864 16128-17526/fr.rolandl.myapplication D/LeakCanary: * references android.support.v4.content.LocalBroadcastManager.mReceivers 04-13 14:22:00.864 16128-17526/fr.rolandl.myapplication D/LeakCanary: * references java.util.HashMap.table 04-13 14:22:00.864 16128-17526/fr.rolandl.myapplication D/LeakCanary: * references array java.util.HashMap$HashMapEntry[].[5] 04-13 14:22:00.864 16128-17526/fr.rolandl.myapplication D/LeakCanary: * references java.util.HashMap$HashMapEntry.key 04-13 14:22:00.864 16128-17526/fr.rolandl.myapplication D/LeakCanary: * references fr.rolandl.myapplication.MainActivity$1.this$0 (anonymous subclass of android.content.BroadcastReceiver) 04-13 14:22:00.864 16128-17526/fr.rolandl.myapplication D/LeakCanary: * leaks fr.rolandl.myapplication.MainActivity instance 04-13 14:22:00.864 16128-17526/fr.rolandl.myapplication D/LeakCanary: * Retaining: 4,3 Ko. 04-13 14:22:00.864 16128-17526/fr.rolandl.myapplication D/LeakCanary: * Reference Key: 605c2fc0-77e1-4027-8999-5014c3cc9215 ... 27
  28. 28. LeakCanary affiche les détails... ➜ Il convient de cliquer sur la notification pour ouvrir le détail de la potentielle fuite mémoire. ou ➜ ouvrir l’écran dédié 28
  29. 29. LeakCanary affiche les détails… (suite) 29
  30. 30. Des questions ? Plus d’informations sur notre blog : https://medium.com/smart-soft 30
  31. 31. 31 Ludovic Roland Responsable du pôle Android Ingénieur en développement logiciel Android, Windows Phone / Store et Windows 10. ludovic@smartnsoft.com @ludovicroland @smartnsoft
  32. 32. Smart&Soft Siège social : 69, rue Saint Lazare – 75 009 - Paris Bureaux : 45, rue Jean Jaurès – 92 300 - Levallois contact@smartnsoft.com 01 41 06 15 26 32

×