Android 毕加索垃圾收集目标

Android 毕加索垃圾收集目标,android,kotlin,garbage-collection,picasso,Android,Kotlin,Garbage Collection,Picasso,我正在使用科特林和毕加索来显示URL中的图像。现在我有意向地分享了一些内容,我分享了一些图片和文字。这是我的密码: Picasso.get().load(URL).into(object : Target { override fun onBitmapLoaded(bitmap: Bitmap?, from: Picasso.LoadedFrom?) { val shareIntent: Intent = Intent(

我正在使用科特林和毕加索来显示URL中的图像。现在我有意向地分享了一些内容,我分享了一些图片和文字。这是我的密码:

         Picasso.get().load(URL).into(object : Target {
            override fun onBitmapLoaded(bitmap: Bitmap?, from: Picasso.LoadedFrom?) {

                val shareIntent: Intent = Intent().apply {
                    action = Intent.ACTION_SEND_MULTIPLE
                    putExtra(Intent.EXTRA_STREAM, getBitmapFromView(bitmap, this@DealActivity))
                    putExtra(Intent.EXTRA_TEXT, textForShare)

                    type = "image/jpeg"
                }
                startActivity(Intent.createChooser(shareIntent, "SEND"))

            }
            override fun onPrepareLoad(placeHolderDrawable: Drawable?) { }
            override fun onBitmapFailed(e: java.lang.Exception?, errorDrawable: Drawable?) { }
        })
有些时候,这是可行的。大多数时候,什么也没发生。这是我的日志:

2020-05-14 22:12:52.378 11310-11402/il.co.nazooza D/Picasso: Dispatcher  enqueued     [R19]+2ms 
2020-05-14 22:12:52.380 11310-11430/il.co.nazooza D/Picasso: Hunter      executing    [R19]+3ms 
2020-05-14 22:12:53.150 11310-11430/il.co.nazooza D/Picasso: Hunter      decoded      [R19]+773ms 
2020-05-14 22:12:53.151 11310-11402/il.co.nazooza D/Picasso: Dispatcher  batched      [R19]+775ms for completion
2020-05-14 22:12:53.195 11310-11310/il.co.nazooza D/Picasso: Main        canceled     [R19]+813ms target got garbage collected

我已经读到,必须将目标设置为一个字段,但我正在与Kotlin一起努力实现这一点。

看起来此代码位于
活动中,因此您只需将一个字段添加到
活动中,并将其存储在那里:

类MyActivity:Activity(){
私有变量shareTarget:目标?=null
//...
有趣的方法(){
shareTarget=对象:目标{
覆盖乐趣onBitmapLoaded(位图:位图?,发件人:毕加索。LoadedFrom?){
val shareIntent:Intent=Intent().应用{
动作=意图。动作\发送\多次
putExtra(Intent.EXTRA_流,getBitmapFromView(位图,this@DealActivity))
putExtra(Intent.EXTRA_TEXT,textForShare)
type=“image/jpeg”
}
startActivity(Intent.createChooser(shareIntent,“发送”))
//不需要再储存了
shareTarget=null
}
重写fun onPrepareLoad(占位符可绘制:可绘制?{}
重写onBitmapFailed(e:java.lang.Exception?,errorDrawable:Drawable?){
//不需要再储存了
shareTarget=null
}
}
Picasso.get().load(URL).into(shareTarget)
}
// ...
}
请注意,这假设您一次只有一个请求在运行中。如果有多个,则必须将它们存储在某种类型的集合中,或者存储在多个变量或类似的集合中