Android: Impossible de détruire l'activité
Je suis en utilisant le code suivant supprime childs sur chaque viewgroup:
protected void onDestroy() {
super.onDestroy();
this.liberarMemoria();
}
public void liberarMemoria(){
imagenes.recycleBitmaps();
this.unbindDrawables(findViewById(R.id.RelativeLayout1));
System.gc();
}
private void unbindDrawables(View view) {
if (view.getBackground() != null) {
view.getBackground().setCallback(null);
}
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
unbindDrawables(((ViewGroup) view).getChildAt(i));
}
((ViewGroup) view).removeAllViews();
}
}
d'où la vue: R. id.RelativeLayout1 est une ListView.
Mais, ce faisant, j'ai fr exception:
E/AndroidRuntime(582): java.lang.RuntimeException: Unable to destroy activity {...}: java.lang.UnsupportedOperationException: removeAllViews() is not supported in AdapterView
Comment puis-je résoudre ce problème?
OriginalL'auteur android iPhone | 2011-12-06
Vous devez vous connecter pour publier un commentaire.
Bien, le journal des erreurs assez bien, il explique: ne pas appeler
removeAllViews()
surAdapterView
. Et votre code à un certain point de rencontreViewGroup
qui est aussiAdapterView
.Juste règle de ce cas à l'aide de
instanceof
de chèque ou de la poignée à l'exceptiontry
/catch
wrapper.Oui, c'est parce que AdapterView gère ses enfants à l'interne. Vous ne pouvez pas ajouter/enlever, car cela pourrait casser son état interne.
OriginalL'auteur inazaruk
Vérifier si votre ViewGroup n'est pas une instance de AdapterView.
Faire quelque chose comme ça:
Lors de votre code:
OriginalL'auteur Derzu
Supprimer cette ligne? Ou au moins de vérifier si l'opération est prise en charge avec
try
etcatch
.Aussi, c'est un peu déroutant à vouloir faire tout cela dans une méthode appelée
unbindDrawables
, sauf s'il est juste un mal nommée méthode n'est pas de décrire ce qu'il fait entièrement).Êtes-vous appeler tout cela dans
onDestroy
? Si oui, est-il bénéficier de cette mesure? J'étais sous l'impression que le système prend en charge ce genre de chose pour vous.Droit... mais
removeAllViews
n'est pas nécessaire et qu'il est sûr de supprimer iciOriginalL'auteur Craigy
Ne pas l'appeler. UnsupportedOperationException est vous dire que cette méthode n'est pas pris en charge ou fonctionnelle, de sorte que vous aurez à accomplir la tâche d'une autre manière. Je ne vois pas le besoin d'en appeler cela de toute façon, comme le garbage collector gérer cette tâche. Bitmap de recyclage doit être fait manuellement si vous devez vous assurer qu'il fait.
Je ne peux pas vous dire la meilleure façon sans voir de toutes vos sources, mais vous devez le faire dans
onDestroy()
et de garder trace de tous lesBitmap
objets utilisés de sorte que vous pouvezrecycle()
.OriginalL'auteur Dan S