jan
16
2012

[Tutoriel Android] Partie 17 – StrictMode

Le StrictMode

Bonjour à tous,

Aujourd’hui nous allons aborder un petit outil sympathique embarqué au sein de la plateforme Android, cet outil se nomme le StrictMode.

http://developer.android.com/reference/android/os/StrictMode.html

Vous allez me dire, “c’est quoi cette bête ?” le StrictMode est une mode Strict (ouha !) il permet de rendre son application plus performantes en vous donnant des informations précises.

Les informations peuvent être de plusieurs types

  • OS
    • Ecriture sur le disque
    • Lecture sur le disque
    • Opération sur le réseau
    • Accès lents
  • VM (Machine virtuelle)
    • Fuite mémoire sur les activités
    • Fuite mémoire sur les objets
    • Fuite mémoire sur les données SQL

Ces points sont très importants, car pour faire une bonne application il faut la rendre performante, vous allez me dire qu’aujourd’hui on a 1go de ram, des processeurs dual core etc…

Je ne suis pas d’accord sur ce point, sur l’OS vous n’êtes pas la seule application, l’utilisateurs n’utilise pas forcément de gestionnaire de tâches pour décharger les applications qui ne lui servent plus, tout cela à un impact.

Il faut garder en tête qu’un utilisateur lambda installe des applications et les utilisent fréquemment, de plus ces applications sont peut-être mal codées ce qui pose le problème sur la mémoire encombrées.

Pensez aussi au téléphone de l’ancienne génération avec des petits processeurs et peu de mémoire vive.

Avoir une application optimisée et propre va vous permettre de mieux coder et de rendre son utilisation de meilleure qualité.

Pré-requis

  •  Android 2.3 et supérieur

Implémentation

L’implémentation au sein du framework Android n’est disponible qu’à partir d’Android 2.3 donc ne cherchez pas si ça ne fonctionne pas pour les versions inférieures.

Tout d’abord, le StrictMode s’applique uniquement dans les méthodes onCreate(), donc les classes de type Activity, Application et tout autre objet ayant une méthode onCreate.

L’ensemble des informations que nous allons avoir besoin se trouve dans la classe StrictMode fournie par Google.

Au niveau OS nous utiliserons la méthode suivante

public static void setThreadPolicy (StrictMode.ThreadPolicy policy)

Au niveau de la VM nous utiliserons la méthode suivante

public static void setVmPolicy (StrictMode.VmPolicy policy)

Voici un exemple pour la détection au niveau OS

    	StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
    	.detectAll() 	// On détecte tout
    	.penaltyDialog()   // On retourne les informations dans les logs
    	.build());

Au commence par détecter toutes les formes de violations, on affiche les violations dans une popup.

Types de violation (Doc Google)

detectAll() – Detect everything that’s potentially suspect.
detectCustomSlowCalls() – Enable detection of disk reads.
detectDiskReads() – Enable detection of disk reads.
detectDiskWrites() – Enable detection of disk writes.

Retour sur les violations (Doc Google)

penaltyDeath() – Crash the whole process on violation.
penaltyDeathOnNetwork() – Crash the whole process on any network usage.
penaltyDialog()- Show an annoying dialog to the developer on detected violations, rate-limited to be only a little annoying.
penaltyDropBox() – Enable detected violations log a stacktrace and timing data to the DropBox on policy violation.
penaltyFlashScreen() – Flash the screen during a violation.
penaltyLog() – Log detected violations to the system log.

Voici un exemple pour la détection au niveau del a VM

    	StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
    	.detectAll()  // On détecte tout
    	.penaltyLog() // On retourne les informations dans les logs
    	.build());

Au commence par détecter toutes les formes de violations, on affiche les violations dans une popup.

Types de violation (Doc Google)

detectAll() – Detect everything that’s potentially suspect.
detectActivityLeaks() – Detect leaks of Activity subclasses.
detectLeakedClosableObjects() – Detect when an Closeable or other object with a explict termination method is finalized without having been closed.
detectLeakedSqlLiteObjects() – Detect when an SQLiteCursor or other SQLite object is finalized without having been closed.

Retour sur les violations (Doc Google)

penaltyDeath() – Crash the whole process on violation.
penaltyDropBox() – Enable detected violations log a stacktrace and timing data to the DropBox on policy violation.
penaltyLog() – Log detected violations to the system log.

Voici ce que vous pouvez avoir si vous souhaitez accéder a internet sans internet.

Je vous conseil vivement d’utiliser ce petit outils dans vos applications pour améliorer celles-ci.

Download PDF
  • http://www.facebook.com/julien.bertozzi Julien Bertozzi

    Merci beaucoup pour tes tutos :)

  • http://www.ace-art.fr/wordpress Acesyde

    De rien ;)

Switch to mobile version