5 votes

Pourquoi mon activité provoque-t-elle une fuite de mémoire lorsque je navigue avec le bouton d'accueil ?

Chaque fois que je quitte mon application avec le bouton Home de mon téléphone Android et que j'entre à nouveau dans l'application à l'aide de l'icône du lanceur, l'activité initiale de mon application se répète. Si je répète la routine cinq fois, il y a cinq instances de mon activité initiale.

J'ai contrôlé cela par des vidages de tas dans Eclipse, en m'assurant que je faisais le ramassage des ordures avant chaque vidage. Voici la vue que j'obtiens lorsque je demande Fusionner Shortes Path to GC Root avec toutes les références de ma classe d'activité dans l'histogramme :

Class Name                                                                     | Ref. Objects | Shallow Heap | Ref. Shallow Heap | Retained Heap
-------------------------------------------------------------------------------------------------------------------------------------------------
                                                                               |              |              |                   |              
android.view.ViewRootImpl$WindowInputEventReceiver @ 0x41408a80 Native Stack   |            1 |           32 |               224 |           184
class android.view.inputmethod.InputMethodManager @ 0x40d93e78 System Class    |            1 |           88 |               224 |           616
'- mInstance android.view.inputmethod.InputMethodManager @ 0x413422e0          |            1 |          112 |               224 |           296
   '- mServedView, mNextServedView android.widget.ListView @ 0x41331100        |            1 |        1 088 |               224 |       124 096
      '- mContext nilsnett.chinese.activities.GameOverviewActivity @ 0x44eeecd8|            1 |          224 |               224 |         1 000
android.view.ViewRootImpl$WindowInputEventReceiver @ 0x41af4a60 Native Stack   |            1 |           32 |               224 |           184
android.view.ViewRootImpl$WindowInputEventReceiver @ 0x412cf928 Native Stack   |            1 |           32 |               224 |           184
android.view.ViewRootImpl$WindowInputEventReceiver @ 0x44cd3090 Native Stack   |            1 |           32 |               224 |           184
'- this$0 android.view.ViewRootImpl @ 0x44cd1f20                               |            1 |          464 |               224 |         2 168
   '- mView com.android.internal.policy.impl.PhoneWindow$DecorView @ 0x44cbef00|            1 |          536 |               224 |         1 336
      '- mContext nilsnett.chinese.activities.GameOverviewActivity @ 0x44cbdee8|            1 |          224 |               224 |         1 000
Total: 5 entries                                                               |            5 |          216 |             1 120 |              
-------------------------------------------------------------------------------------------------------------------------------------------------

Il semble donc qu'il existe une propriété (ou une classe ?) WindowInputEventReceiver qui fait référence à mon activité GameOverviewActivity . Pourquoi et comment y mettre fin ?

-2voto

Bob Points 1

J'ai trouvé la raison WindowInputEventReceiver met en œuvre la méthode finalize,il cause une référence. J'appelle System.gc en onDestroy pour résoudre ce problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X