Glisse chargement de l'image avec le contexte de l'application
Je suis à l'aide de glissement du chargement de l'image dans mon application android, pour éviter les accidents, je suis le chargement des images avec le contexte de l'application. Quel sera l'effet de cette situation sur les performances de l'application et de la mémoire?
Vous devez vous connecter pour publier un commentaire.
Glide offre également de nombreuses
.with()
méthodes pour une raison: il suit le cycle de vie.Imaginer un
Fragment
qui est ajouté dynamiquement à une Activité. Dans sononCreateView
méthode, il commence une descente de charge de 3 MO image. Maintenant, si l'utilisateur appuie sur le bouton retour et le Fragment est retirée ou que l'ensemble de l'activité est-elle fermée?with(getActivity().getApplicationContext())
il ne se passera rien, tous les 3MBs de données est téléchargé et ensuite décodé, mise en cache, sans doute même l'ImageView, qui est ensuite nettoyée, parce que la seule référence c'est à partir de Glisse internes.with((Fragment)this)
Glide souscrit à l'Fragment du cycle de vie des événements et dès que le Fragment est arrêté, la toute demande en suspens doit être interrompu; et lorsqu'il est détruit, toutes les demandes en attente d'être acquitté. Cela signifie que le téléchargement de l'image va s'arrêter à mi-chemin et pas plus de ressources seront utilisées par la mort Fragment.with(getActivity())
Glide souscrit à l'Activité du cycle de vie des événements et c'est la même chose que ci-dessus, mais seulement lorsque l'Activité est arrêtée ou détruit.Donc, la meilleure pratique est d'utiliser le plus proche possible du contexte/fragment d'éviter inutilisés achèvements de la demande! (Il y a aussi un manuel façon d'arrêter une charge:
Glide.clear(ImageView|Target)
.)À les appliquer dans la pratique, essayez d'utiliser
with(this)
lorsque c'est possible, mais quand il n'est pas, comme dans un adaptateur, ou encore une centralisé chargement de l'image de la méthode, passer uneRequestManager glide
comme argument et l'utilisationglide.load(...
, par exemple:ou dans l'adaptateur:
et l'utilisation de ces de l'Activité/de Fragment:
mContext
et l'utilisationGlide.with(mContext)...
dans la carte?getActivity()
donc, si vous remplacez le fragment avec une transaction, les ressources ne seront pas libérés jusqu'à ce que l'utilisateur quitte l'activité. Si vous avez besoin d'unmContext
pour d'autres raisons (par exemple,getString
), vous pouvez simplement utiliseranyView.getContext()
.Glide.with(view.getContext())
est en fait l'équivalent deGlide.with(this)
pour n'importe quel affichage apparaissant sur cette activité, parce queRequestManagerRetriever.get(Context context)
vérifie si le contexte est un instanceofActivity
et il jette de façon appropriée, par exempleget((Activity)context)
. Donc, il va finir à l'aide de la mêmeget(Activity)
méthode à l'autre.Glide.with(this).onDestroy()
? En supposant que nous utilisons le bonContext
avec notreGlide.with()..
appel, depuisGlide
accrocher dans l'Activité/des Fragments du cycle de vie?with
et vous devriez être ok pour les opérations de nettoyage.Glide.with(imageView).clear(imageView)
à l'intérieur d'un Fragment -> ViewHolder où le fragment d'instance n'est pas directement accessible? Je suis en utilisant le Glisser-4.0.0-RC1.with(View)
. En regardant le code, les deux cas se résument à unesupportFragmentGet()
appel.