qu'est-ce que l'utilisation de recycler() la méthode en TypedArray
J'ai créé un GalleryView
et ImageView
qui affiche l'Image en plus grand quand un élément est cliqué dans la galerie. J'ai utilisé le code ci-dessous pour mettre en œuvre les ImageAdapter
:
public ImageAdapter(Context c)
{
context = c;
TypedArray a = obtainStyledAttributes(R.styleable.gallery1);
itemBackground = a.getResourceId(R.styleable.gallery1_android_galleryItemBackground, 0);
a.recycle();
}
Quand j'ai retiré la déclaration a.recycle()
il n'y a pas de changement et que l'application fonctionne normalement comme avant, mais j'ai lu partout qu'il est obligatoire de recycler les typedArray
. Quand il n'y a pas de changement dans la façon dont mon application est en cours d'exécution, quelle est l'utilisation de la recycle()
méthode?
Vous devez vous connecter pour publier un commentaire.
Le point est similaire à l'idée de la compensation d'un pointeur dans un langage C (si vous êtes au courant). Il est utilisé pour rendre les données associées à
a
prêt pour la collecte des ordures ainsi, la mémoire/de données n'est pas inefficace lié àa
quand il n'est pas besoin de l'être. Lire plus ici.Il est important de noter que ce n'est pas vraiment nécessaire, sauf si vous êtes réellement la réutilisation "un". GC devrait effacer automatiquement ces données pour vous si l'objet n'est pas encore utilisé. La raison pour laquelle un
TypedArray
est différent, cependant, est qu'unTypedArray
a d'autres données internes qui doivent être retournés (connu sous le nomStyledAttributes
) à laTypedArray
pour les réutiliser ultérieurement. Lire à ce sujet ici.TypedArray
peut être ré-utilisé par un plus tard de l'appelant (pas l'instance elle-même comme vous le comprenez dans le cadre de votre programme). C'est pourquoi la documentation dit aussi: "Après l'appel de cette fonction, vous ne devez jamais toucher le tableau typé de nouveau.".La
recycle()
causes de la mémoire allouée à être renvoyé au groupe disponible immédiatement et ne restera pas jusqu'à ce que la collecte des ordures. Cette méthode est également disponible pourBitmap
.recycler signifie..libre/compensation de toutes les données associées à la ressource correspondante.
Dans Android, nous pouvons trouver de recyclage pour les images Bitmap et les TypedArray.
Si vous cochez les deux fichiers source, alors vous pouvez trouver une variable booléenne "mRecycled", qui est "faux"(valeur par défaut). Il est attribué à "true" lorsque le recyclage est appelé.
Alors, Maintenant, si vous cochez cette méthode(recycler la méthode dans les classes) puis vous, nous pouvons observer qu'ils sont de compensation de toutes les valeurs.
Pour référence, voici la méthode.
Bitmap.java:
TypedArray.java
cette ligne
sortira le typedArray de la SunchronisedPool dont la valeur par défaut est 5.
Donc, vous ne devriez pas utiliser la même typedArray à nouveau comme il est effacée.
une fois "mRecycled" de TypedArray est vrai, alors lors de l'obtention de ses propriétés qu'il va jeter RuntimeException disant "Impossible de faire des appels à un recyclés exemple!".
) des nouvelles comportement en cas de Bitmap ainsi.
Espérons que cela aide.
Que son utilisation est de plus de[
after initializing our local attributes
] nous recycler retour à la liste des Ressources