垃圾收集和毕加索的问题

fal*_*ure 4 java android garbage-collection imageview picasso

我试图在Google Maps Marker的InfoWindow中设置一个ImageView,并且已经完全复制了这个答案中的代码,除了我的InfoWindowAdapter不是一个匿名内部类(它只是活动的内部类).这之前有效,但由于某种原因它已停止工作 - 回调中的onSuccess方法没有被调用,因此InfoWindow仅在第二次打开时显示图像.

看看毕加索的日志,我收到类似的消息Main canceled [R20]+374ms target got garbage collected.我想这可能是因为Callback正在获取gc'd,并尝试将其设置为final,并且还将对象保存在类字段中(这些都不起作用,尽管我可能做错了吗?)

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

另一件奇怪的事情是,有时在InfoWindow首次打开时图像被正确加载 - 我正在试图找出原因,但基本上我有很多标记,并且他们的图像是否正确加载或者首先加载似乎是不一致.首次打开InfoWindow时,有些(大多数)似乎永远无法正确加载.

[编辑]这是在一堆代码合并到该活动之后,它可能是一个记忆的东西吗?(现在处理的时间比我没有遇到这个问题时要多)

[编辑2]我和Glide有完全相同的问题!可能垃圾收集?

ytR*_*ino 7

我不熟悉那个答案,但是Target如果你没有强烈提及那个问题,那就可以了.

这是因为毕加索持有Target弱参照的实例.

你应该Target在毕加索之外的某个地方举行实例.

请查看此问题:https://github.com/square/picasso/issues/352