Java 垃圾收集和毕加索的问题

Java 垃圾收集和毕加索的问题,java,android,garbage-collection,imageview,picasso,Java,Android,Garbage Collection,Imageview,Picasso,我试图在Google Maps Marker的InfoWindow中设置ImageView,并从中复制了非常精确的代码,只是我的InfoWindowAdapter不是匿名内部类(它只是活动的内部类)。这以前是有效的,但由于某种原因它已经停止工作-回调中的onSuccess方法没有被调用,因此InfoWindow只在第二次打开时显示图像 查看毕加索的日志,我得到的消息类似于Main cancelled[R20]+374ms target被垃圾回收。我想这可能是因为回调得到了gc'd,并尝试将其设置

我试图在Google Maps Marker的InfoWindow中设置ImageView,并从中复制了非常精确的代码,只是我的InfoWindowAdapter不是匿名内部类(它只是活动的内部类)。这以前是有效的,但由于某种原因它已经停止工作-回调中的onSuccess方法没有被调用,因此InfoWindow只在第二次打开时显示图像

查看毕加索的日志,我得到的消息类似于
Main cancelled[R20]+374ms target被垃圾回收。我想这可能是因为回调得到了gc'd,并尝试将其设置为final,还将对象保存在一个类字段中(这两个都不起作用,尽管可能我做得不对?)

这里可能会发生什么,我该如何解决?错误消息中的
target
是指回调,还是指作为参数传递给回调构造函数的标记

另一件奇怪的事情是,有时候当InfoWindow第一次打开时,图像被正确加载-我试图找出原因,但基本上我有很多标记,它们的图像在第一次加载时是否正确似乎不一致。当InfoWindow第一次打开时,有些(大多数)似乎从未正确加载

[编辑]这是在一堆代码被合并到该活动中之后,所以它可能是一个内存问题吗?(与我没有遇到此问题时相比,现在完成了更多的处理)


[编辑2]我也有同样的问题!!可能是垃圾收集?

我不太熟悉这个答案,但是如果您没有很强的引用,
Target
可能会被gc'ed

这是因为毕加索持有的
Target
实例引用较弱

您应该在毕加索之外的某个地方持有
Target
实例


检查此问题:

解决了它,垃圾收集消息实际上引用的是ImageView,而不是回调对象。确保ImageView对象未被垃圾收集将纠正这一问题(例如,通过将ImageView保存在类中的字段中,甚至保存我的类嵌套在其中的活动)

我也犯了同样的错误,下面是有效的解决方案:

My previous code :

        picasso.load(url).into(new Target() {
    @Override
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {

    }

    @Override
    public void onBitmapFailed(Exception e, Drawable errorDrawable) {

    }

    @Override
    public void onPrepareLoad(Drawable placeHolderDrawable) {

    }
});

After this I just created a new variable for Target object :

final Target target=new Target() {
    @Override
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
        imageView.setBackground(new BitmapDrawable(mContext.getResources(), bitmap));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    }

    @Override
    public void onBitmapFailed(Exception e, Drawable errorDrawable) {

    }

    @Override
    public void onPrepareLoad(Drawable placeHolderDrawable) {

    }
};

then I used the target object later in my code :

        picasso.load(url).into( target);

谢谢,我尝试将回调对象存储在活动的一个字段中(回调和InfoWindowAdapter都嵌套在其中),然后将该字段作为参数传递给
.into()
,但我收到了相同的消息和问题(不确定是否正确),显然回调始终作为强引用保留