关于Android GC的一些理解

    xiaoxiao2025-12-06  3

    最近在实习单位使用Picasso重构掉UniversalImageLoader使使用了如下的代码

    Picasso.with(this) .load(pictureUrl) .into(new Target() { @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { doSomeThing(); } @Override public void onBitmapFailed(Drawable errorDrawable) { } @Override public void onPrepareLoad(Drawable placeHolderDrawable) { } });

    doSomeThing()方法总是不会被调用,google后知道是由于target对象被GC了,我就想让target对象保持一个对imageview的引用,是不是就不会被GC了?结果是我想反了,GC时和不管你有没有保持别的对象的引用,只在乎你有没有被别的对象持有强引用,修改代码如下:

    Target target = new Target() { @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { imageView.setImageBitmap(bitmap); } @Override public void onBitmapFailed(Drawable errorDrawable) { } @Override public void onPrepareLoad(Drawable placeHolderDrawable) { } }; imageView.setTag(target); Picasso.with(this).load(pictureUrl).into(target);
    转载请注明原文地址: https://ju.6miu.com/read-1304669.html
    最新回复(0)