J'ai un problème avec la mémoire après avoir couru plusieurs fois mon application.PhoneStateListener fuite de mémoire - android
java.lang.OutOfMemoryError: la taille du bitmap dépasse le budget VM
Je me dis que je suis en quelque sorte une fuite de mémoire, donc je l'ai fait un fichier HPROF DUMP et utilisé l'outil MAT pour savoir ce qui était faux. Il se trouve que, après avoir exécuté 5 fois l'application et quitter, je trouve 5 instances de mon activité et 5 instances de PhoneStateListener.
Si je supprime l'appel à PhoneStateListener, je n'ai plus ce problème et je vois juste 1 instance de mon activité. La question est, comment puis-je résoudre ce problème?
Merci
Daniel
Voici mon code:
méthode OnCreate:
telephonyManager.listen(mPhoneListener,
PhoneStateListener.LISTEN_SERVICE_STATE
| PhoneStateListener.LISTEN_SIGNAL_STRENGTH
| PhoneStateListener.LISTEN_CALL_STATE
| PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
| PhoneStateListener.LISTEN_DATA_ACTIVITY);
sur la classe d'activité:
PhoneStateListener mPhoneListener = new PhoneStateListener() {
public void onCallStateChanged(int state,
java.lang.String incomingNumber) {
//do something
}
}
sur la méthode de OnDestroy:
telephonyManager.listen(mPhoneListener, PhoneStateListener.LISTEN_NONE);
mPhoneListener = null;
merci. Ce n'était pas la source du problème que j'avais, mais oui, c'est la bonne réponse à ma question. –
Alors, que faire si je veux que mon application écoute les appels entrants pendant que le service est actif? Appel de mTelMan.listen (mCustomCallStateListener, PhoneStateListener.LISTEN_CALL_STATE); En quelque sorte, le cycle de vie et le service ne sont pas détruits correctement. Est-ce que cela a de l'importance que mon écouteur personnalisé obtienne un autre objet dans le constructeur, alors je me retrouve dans une situation de fuite de mémoire? – Ewoks
Si onDestroy n'est pas appelé, cela signifie que le processus a été brutalement interrompu. Dans ce cas, les fuites de mémoire sont résolues, la réponse @Jan semble correcte – lelloman