SlideShare une entreprise Scribd logo
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 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
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
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 type
OutOfMemoryError
<application
...
android:largeHeap= "true"
...
>
<!-- -->
</application >
7
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’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
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
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
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
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://fr.wikipedia.org/wiki/Object_Query_Language
15
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ésultat :
17
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 a WHERE a.mDestroyed = true
➜ SELECT s.getValueAt(2) FROM int[] s WHERE (s.@length > 2)
19
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 application :
21
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
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 au sein d’une
application
➜ Open-source
➜ Créée par Square
➜ https://github.com/square/leakcanary
25
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
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
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
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
Windows 10.
ludovic@smartnsoft.com
@ludovicroland
@smartnsoft
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

Contenu connexe

En vedette

Doctrina
DoctrinaDoctrina
Doctrina
mathiasgisse
 
Mobile Banking Student Presentation
Mobile Banking Student PresentationMobile Banking Student Presentation
Mobile Banking Student Presentation
Ralf Waubke
 
Buyer'sGuideIssuu
Buyer'sGuideIssuuBuyer'sGuideIssuu
Buyer'sGuideIssuu
Susan Horak
 
Aplikasi Gallery Pengetahuan
Aplikasi Gallery PengetahuanAplikasi Gallery Pengetahuan
Aplikasi Gallery Pengetahuan
rohmatulk
 
Resume
ResumeResume
Latihan
LatihanLatihan
Latihan
bintangbb
 
¿Cómo es tu día activo?
¿Cómo es tu día activo?¿Cómo es tu día activo?
¿Cómo es tu día activo?
maria cereceda
 
González valentín presentación_competic2
González valentín presentación_competic2González valentín presentación_competic2
González valentín presentación_competic2
antonigau
 
Praktek
PraktekPraktek
Praktek
bintangbb
 
WindEnergyFinal-2-2
WindEnergyFinal-2-2WindEnergyFinal-2-2
WindEnergyFinal-2-2
Danny Farr
 
White Paper Organizational Design
White Paper Organizational DesignWhite Paper Organizational Design
White Paper Organizational Design
Pablo Borrero
 
Lamont Jones Marketing Porfolio 2017
Lamont Jones Marketing Porfolio 2017Lamont Jones Marketing Porfolio 2017
Lamont Jones Marketing Porfolio 2017
Lamont Jones
 
newmarketingplan_04-14-WEB
newmarketingplan_04-14-WEBnewmarketingplan_04-14-WEB
newmarketingplan_04-14-WEB
Susan Horak
 
Deep Dive Training Energy Efficiency in Industrial Processes
Deep Dive TrainingEnergy Efficiency in Industrial ProcessesDeep Dive TrainingEnergy Efficiency in Industrial Processes
Deep Dive Training Energy Efficiency in Industrial Processes
Christoph Emde
 
CVTemplate_en_GB europass zugravu
CVTemplate_en_GB europass zugravuCVTemplate_en_GB europass zugravu
CVTemplate_en_GB europass zugravu
zugravu adrian
 
resume 2015
resume 2015resume 2015
resume 2015
Jamie Love Tompkins
 
12 najpiękniejszych planerów wg Przedsiebiorcza.com
12 najpiękniejszych planerów wg Przedsiebiorcza.com12 najpiękniejszych planerów wg Przedsiebiorcza.com
12 najpiękniejszych planerów wg Przedsiebiorcza.com
Joanna Długa
 
Desenvolvendo aplicações Cross-Platform com Xamarin
Desenvolvendo aplicações Cross-Platform com XamarinDesenvolvendo aplicações Cross-Platform com Xamarin
Desenvolvendo aplicações Cross-Platform com Xamarin
Júnior Porfirio
 
González valentin annex_competic2
González valentin annex_competic2González valentin annex_competic2
González valentin annex_competic2
antonigau
 
Encryption ppt
Encryption pptEncryption ppt
Encryption ppt
Anil Neupane
 

En vedette (20)

Doctrina
DoctrinaDoctrina
Doctrina
 
Mobile Banking Student Presentation
Mobile Banking Student PresentationMobile Banking Student Presentation
Mobile Banking Student Presentation
 
Buyer'sGuideIssuu
Buyer'sGuideIssuuBuyer'sGuideIssuu
Buyer'sGuideIssuu
 
Aplikasi Gallery Pengetahuan
Aplikasi Gallery PengetahuanAplikasi Gallery Pengetahuan
Aplikasi Gallery Pengetahuan
 
Resume
ResumeResume
Resume
 
Latihan
LatihanLatihan
Latihan
 
¿Cómo es tu día activo?
¿Cómo es tu día activo?¿Cómo es tu día activo?
¿Cómo es tu día activo?
 
González valentín presentación_competic2
González valentín presentación_competic2González valentín presentación_competic2
González valentín presentación_competic2
 
Praktek
PraktekPraktek
Praktek
 
WindEnergyFinal-2-2
WindEnergyFinal-2-2WindEnergyFinal-2-2
WindEnergyFinal-2-2
 
White Paper Organizational Design
White Paper Organizational DesignWhite Paper Organizational Design
White Paper Organizational Design
 
Lamont Jones Marketing Porfolio 2017
Lamont Jones Marketing Porfolio 2017Lamont Jones Marketing Porfolio 2017
Lamont Jones Marketing Porfolio 2017
 
newmarketingplan_04-14-WEB
newmarketingplan_04-14-WEBnewmarketingplan_04-14-WEB
newmarketingplan_04-14-WEB
 
Deep Dive Training Energy Efficiency in Industrial Processes
Deep Dive TrainingEnergy Efficiency in Industrial ProcessesDeep Dive TrainingEnergy Efficiency in Industrial Processes
Deep Dive Training Energy Efficiency in Industrial Processes
 
CVTemplate_en_GB europass zugravu
CVTemplate_en_GB europass zugravuCVTemplate_en_GB europass zugravu
CVTemplate_en_GB europass zugravu
 
resume 2015
resume 2015resume 2015
resume 2015
 
12 najpiękniejszych planerów wg Przedsiebiorcza.com
12 najpiękniejszych planerów wg Przedsiebiorcza.com12 najpiękniejszych planerów wg Przedsiebiorcza.com
12 najpiękniejszych planerów wg Przedsiebiorcza.com
 
Desenvolvendo aplicações Cross-Platform com Xamarin
Desenvolvendo aplicações Cross-Platform com XamarinDesenvolvendo aplicações Cross-Platform com Xamarin
Desenvolvendo aplicações Cross-Platform com Xamarin
 
González valentin annex_competic2
González valentin annex_competic2González valentin annex_competic2
González valentin annex_competic2
 
Encryption ppt
Encryption pptEncryption ppt
Encryption ppt
 

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

Développer une application android en 2015
Développer une application android  en 2015Développer une application android  en 2015
Développer une application android en 2015
Florent Champigny
 
cours-android.pdf
cours-android.pdfcours-android.pdf
cours-android.pdf
med_univ78
 
Android introvf
Android introvfAndroid introvf
Android introvf
Anne-Marie Pinna-Dery
 
Présentation GWT et HTML 5 pour l'Offline
Présentation GWT et HTML 5 pour l'OfflinePrésentation GWT et HTML 5 pour l'Offline
Présentation GWT et HTML 5 pour l'Offline
DNG Consulting
 
De la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logicielsDe la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logiciels
Johan Moreau
 
Cours android
Cours androidCours android
Cours android
Ad Hafsa
 
Android Studio, premier contact
Android Studio, premier contactAndroid Studio, premier contact
Android Studio, premier contact
Jasmine Conseil
 
Android Studio, premier contact
Android Studio, premier contactAndroid Studio, premier contact
Android Studio, premier contact
Jasmine Conseil
 
cours Android.pptx
cours Android.pptxcours Android.pptx
cours Android.pptx
YaminaGh1
 
Installation open erp
Installation open erpInstallation open erp
Installation open erp
Addi Ait-Mlouk
 
Débuter avec phonegap (APACHE CORDOVA) dans eclipse pour android
Débuter avec phonegap (APACHE CORDOVA) dans eclipse pour androidDébuter avec phonegap (APACHE CORDOVA) dans eclipse pour android
Débuter avec phonegap (APACHE CORDOVA) dans eclipse pour android
Bosco Basabana
 
FelixDroid: Application de gestion du framework Felix pour Android
FelixDroid: Application de gestion du framework Felix pour AndroidFelixDroid: Application de gestion du framework Felix pour Android
FelixDroid: Application de gestion du framework Felix pour Android
OSGi User Group France
 
Support POO Java première partie
Support POO Java première partieSupport POO Java première partie
Support POO Java première partie
ENSET, Université Hassan II Casablanca
 
Introduction_Android_-_Complet.pdf
Introduction_Android_-_Complet.pdfIntroduction_Android_-_Complet.pdf
Introduction_Android_-_Complet.pdf
med_univ78
 
Sec day cuckoo_workshop
Sec day cuckoo_workshopSec day cuckoo_workshop
Sec day cuckoo_workshop
Thomas Roccia
 
ASFWS 2012 - Le développement d’applications sécurisées avec Android par Joha...
ASFWS 2012 - Le développement d’applications sécurisées avec Android par Joha...ASFWS 2012 - Le développement d’applications sécurisées avec Android par Joha...
ASFWS 2012 - Le développement d’applications sécurisées avec Android par Joha...
Cyber Security Alliance
 
À La découverte de flow3 - t3con12
À La découverte de flow3 -  t3con12À La découverte de flow3 -  t3con12
À La découverte de flow3 - t3con12
mguermazi
 
DART.pptx
DART.pptxDART.pptx
DART.pptx
IdrissaDembl
 

Similaire à PAUG 03/05/2016 : Rechercher et analyser les fuites mémoires dans une application Android (20)

Développer une application android en 2015
Développer une application android  en 2015Développer une application android  en 2015
Développer une application android en 2015
 
cours-android.pdf
cours-android.pdfcours-android.pdf
cours-android.pdf
 
Android introvf
Android introvfAndroid introvf
Android introvf
 
Présentation GWT et HTML 5 pour l'Offline
Présentation GWT et HTML 5 pour l'OfflinePrésentation GWT et HTML 5 pour l'Offline
Présentation GWT et HTML 5 pour l'Offline
 
De la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logicielsDe la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logiciels
 
Cours android
Cours androidCours android
Cours android
 
Android Studio, premier contact
Android Studio, premier contactAndroid Studio, premier contact
Android Studio, premier contact
 
Android Studio, premier contact
Android Studio, premier contactAndroid Studio, premier contact
Android Studio, premier contact
 
cours Android.pptx
cours Android.pptxcours Android.pptx
cours Android.pptx
 
Installation open erp
Installation open erpInstallation open erp
Installation open erp
 
Débuter avec phonegap (APACHE CORDOVA) dans eclipse pour android
Débuter avec phonegap (APACHE CORDOVA) dans eclipse pour androidDébuter avec phonegap (APACHE CORDOVA) dans eclipse pour android
Débuter avec phonegap (APACHE CORDOVA) dans eclipse pour android
 
FelixDroid: Application de gestion du framework Felix pour Android
FelixDroid: Application de gestion du framework Felix pour AndroidFelixDroid: Application de gestion du framework Felix pour Android
FelixDroid: Application de gestion du framework Felix pour Android
 
Support POO Java première partie
Support POO Java première partieSupport POO Java première partie
Support POO Java première partie
 
Introduction_Android_-_Complet.pdf
Introduction_Android_-_Complet.pdfIntroduction_Android_-_Complet.pdf
Introduction_Android_-_Complet.pdf
 
Cours android
Cours androidCours android
Cours android
 
Cours Android
Cours AndroidCours Android
Cours Android
 
Sec day cuckoo_workshop
Sec day cuckoo_workshopSec day cuckoo_workshop
Sec day cuckoo_workshop
 
ASFWS 2012 - Le développement d’applications sécurisées avec Android par Joha...
ASFWS 2012 - Le développement d’applications sécurisées avec Android par Joha...ASFWS 2012 - Le développement d’applications sécurisées avec Android par Joha...
ASFWS 2012 - Le développement d’applications sécurisées avec Android par Joha...
 
À La découverte de flow3 - t3con12
À La découverte de flow3 -  t3con12À La découverte de flow3 -  t3con12
À La découverte de flow3 - t3con12
 
DART.pptx
DART.pptxDART.pptx
DART.pptx
 

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

  • 1. Analyser les fuites de mémoire dans une application Android
  • 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. 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. Introduction ➜ Des fuites de mémoire en Java ? ➜ Des conséquences bien présentes... 4
  • 5. 5 1. Les fausses solutions 2. Les requêtes OQL 3. L’histogramme 4. La bibliothèque LeakCanary Plan Plan
  • 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
  • 9. Le logiciel indispensable... ➜ Eclipse Memory Analyzer (MAT) ➜ http://www.eclipse.org/mat/ 9
  • 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. 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. 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. 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
  • 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. 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. 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. Il faut savoir ce que l’on recherche ! 18
  • 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
  • 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. 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. Vérifier la disparition de la fuite de mémoire 1. Filtrer avec le nom de package de votre application : 23
  • 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. 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. 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. 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. LeakCanary affiche les détails… (suite) 29
  • 30. Des questions ? Plus d’informations sur notre blog : https://medium.com/smart-soft 30
  • 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. 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