Quand il est sûr d'utiliser des classes internes anonymes dans Android
Fuites de mémoire de classe interne
Sous Android, une fuite de mémoire se produit lorsqu’une classe interne survit à sa classe externe. Cela peut se produire lorsque la classe interne détient une forte référence à la classe externe, directement ou indirectement via un autre objet.
Situations sûres pour utiliser des classes internes anonymes
Utilisation Les classes internes anonymes à l'intérieur d'une activité sont généralement sûres lorsque :
Exemple de classe interne anonyme sécurisée
L'exemple de code que vous avez fourni dans votre question est un exemple de classe interne anonyme sécurisée :
// This is safe because the anonymous class is a short-lived callback okButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { dialog.dismiss(); } });
Situation dangereuse pour utiliser des classes internes anonymes
L'utilisation de classes internes anonymes dans une activité peut être dangereuse lorsque :
Exemple de classe interne anonyme dangereuse
L'exemple de code suivant illustre une classe interne anonyme dangereuse :
// This is dangerous because _droidPlayRunnable holds a long-lived reference to _someFieldOfTheActivity _handlerToDelayDroidMove = new Handler(); _handlerToDelayDroidMove.postDelayed(_droidPlayRunnable, 10000); private Runnable _droidPlayRunnable = new Runnable() { public void run() { _someFieldOfTheActivity.performLongCalculation(); } };
Comprendre le cycle de vie des activités et les classes internes
Les activités Android ont un cycle de vie qui détermine quand elles sont créées, reprises, mises en pause et détruites. Lorsqu'une activité est détruite, son état interne est perdu. Cela inclut les références à toutes les classes internes de l'activité.
Protection contre les fuites de mémoire
Pour éviter les fuites de mémoire dans les classes internes anonymes, il est important de :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!