第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在第一次加載時未調用的Target對象的onBitmapLoaded

在第一次加載時未調用的Target對象的onBitmapLoaded

在第一次加載時未調用的Target對象的onBitmapLoaded在我的功能:public void getPointMarkerFromUrl(final String url, final OnBitmapDescriptorRetrievedListener listener) {final int maxSize = context.getResources().getDimensionPixelSize(R.dimen.icon_max_size);Target t = new Target() {   @Override   public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {     if (bitmap != null)       listener.bitmapRetrieved(getBitmapDescriptorInCache(url, bitmap));     else       loadDefaultMarker(listener);   }   @Override   public void onBitmapFailed(Drawable errorDrawable) {     loadDefaultMarker(listener);   }   @Override   public void onPrepareLoad(Drawable placeHolderDrawable) {   }};Picasso.with(context)     .load(url)     .resize(maxSize, maxSize)     .into(t);}我第一次加載圖片時從不調用onBitmapLoaded()。我已經閱讀了一些話題,如https://github.com/square/picasso/issues/39,建議使用fetch(Target t)方法(這似乎是弱引用的問題......),但是這個函數在畢加索的最后一個版本(2.3.2)中沒有。我只有一個fetch()方法,但我不能同時使用(mytarget)你能解釋一下如何使用fetch()和自定義Target嗎?謝謝。Doc:http://square.github.io/picasso/javadoc/com/squareup/picasso/RequestCreator.html#fetch--
查看完整描述

3 回答

?
慕少森

TA貢獻2019條經驗 獲得超9個贊

正如其他受訪者(@lukas和@mradzinski)所指出的那樣,畢加索只對該Target對象保持弱引用。雖然你可以在你的Target一個類中存儲一個強引用,但是如果以任何方式Target引用a ,這仍然會有問題View,因為你也有效地保持對它的強引用View(這是畢加索的事情之一)明確幫助你避免)。

如果您處于這種情況,我建議將標記標記TargetView

final ImageView imageView = ... // The view Picasso is loading an image intofinal Target target = new Target{...};imageView.setTag(target);

這種方法的好處是讓畢加索能夠為您處理一切。它將管理WeakReference每個視圖的對象 - 只要不再需要一個,Target對圖像也將被釋放的任何處理,所以你不會因長期目標而陷入內存泄漏,但你的目標會持續(xù)只要它的觀點還活著。


查看完整回答
反對 回復 2019-08-02
?
回首憶惘然

TA貢獻1847條經驗 獲得超11個贊

Picasso沒有對Target對象的強引用,因此它被垃圾收集并且不調用onBitmapLoaded。

解決方案很簡單,juste強烈引用了Target。

public class MyClass {
   private Target mTarget = new Target() {...};
   public void getPointMarkerFromUrl(final String url, final OnBitmapDescriptorRetrievedListener listener) {
         Picasso.with(context)
         .load(url)
         .resize(maxSize, maxSize)
         .into(mTarget);
   }}


查看完整回答
反對 回復 2019-08-02
?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

如果我有ImageView,我會這么簡單:imageView.setTag(target);

我使用下一個解決方案將Bitmaps加載到通知中,所以我只需要位圖。

因此,創(chuàng)建Set witch將存儲Target對象并在完成加載時將其刪除。

final Set<Target> protectedFromGarbageCollectorTargets = new HashSet<>();private void loadBitmap(String url) {
   Target bitmapTarget = new BitmapTarget(nEvent);
   protectedFromGarbageCollectorTargets.add(bitmapTarget);
   Picasso.with(context).load(url).into(bitmapTarget);}class BitmapTarget implements Target {
        @Override
        public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom loadedFrom) {
                    //handle bitmap
                    protectedFromGarbageCollectorTargets.remove(this);
                }
            }
        }
        @Override
        public void onBitmapFailed(Drawable drawable) {
            protectedFromGarbageCollectorTargets.remove(this);
        }
        @Override
        public void onPrepareLoad(Drawable drawable) {
        }
    }


查看完整回答
反對 回復 2019-08-02
  • 3 回答
  • 0 關注
  • 790 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號