2014-10-22 19 views
7

Używam Picassa w mojej aplikacji.Użycie Picassa Singletona

pierwsze, używam tylko poniższego wzoru:

Picasso.with(context)....into(imgView); 

ten sposób zakładam używam Picasso jako pojedyncza. Czy ja?

Po drugie, chcę użyć setIndicatorsEnabled. Jednak nie można go dodać do powyższego formatu, ponieważ nie jest to metoda statyczna. Czy istnieje sposób korzystania z tej funkcji w powyższym formacie?

Po trzecie, jeśli potrzebuję utworzyć niestandardową instancję przy użyciu Picasso.Builder(...).build(), aby użyć setIndicatorsEnabled, jaki jest najlepszy sposób na wykorzystanie singletonu w działaniach aplikacji?

+3

'Czy mam?': zobacz https://github.com/square/picasso/blob/master/picasso/src/main/java/com/squareup/picasso/Picasso.java# L591 (tak) – njzk2

+2

'setIndicatorsEna bled': 'with' zwraca instancję. wywołaj 'setIndicatorsEnabled' na tej instancji – njzk2

Odpowiedz

10

Tak można zakładać Picasso jest pojedyncza instancja podczas korzystania Picasso.with (kontekstowe) ....

do wykorzystania zestaw wskaźników włączona

Picasso mPicasso = Picasso.with(context); 
mPicasso.setIndicatorsEnabled(true); 
mPicasso....load().into(imageView); 

jeśli używasz konstruktora należy utworzyć własny singleton, który utrzyma twoją instancję Picassa i oczyści go, gdy skończysz. Nie używaj buildera za każdym razem, gdy używasz picasso, ponieważ tworzy on nowe wystąpienie. Wierzę, że Picasso.with (kontekst) po prostu bierze twój kontekst i wywołuje getApplicationContext i przechowuje pojedynczą instancję picasso z kontekstem aplikacji.

3

Tutaj jest dobrym sposobem wdrożenia singleton Picasso klasę

public class ImageHandler { 

    private static Picasso instance; 

    public static Picasso getSharedInstance(Context context) 
    { 
     if(instance == null) 
     { 
      instance = new Picasso.Builder(context).executor(Executors.newSingleThreadExecutor()).memoryCache(Cache.NONE).indicatorsEnabled(true).build(); 
     } 
     return instance; 
    } 
} 

a potem wdrożenie go w kodzie będzie w następujący sposób:

ImageHandler.getSharedInstance(getApplicationContext()).load(imString).skipMemoryCache().resize(width, height).into(image, new Callback() { 
     @Override 
     public void onSuccess() { 
      layout.setVisibility(View.VISIBLE); 
     } 

     @Override 
     public void onError() { 

     } 
    }); 

pamiętać, że nie trzeba zaimplementuj wywołania zwrotne, jeśli nie jest to konieczne

+1

Jeśli umieścisz tę instrukcję return poza klauzulą ​​if-else i usuniesz duplikat, twój kod będzie dużo czystszy –

+2

Zgadzam się, dziękuję .... nie zawsze kodowałem najlepiej za pierwszym razem. .. –

Powiązane problemy