2014-10-22 15 views
7

Sto usando Picasso nella mia app.Picasso Singleton Usage

In primo luogo, io uso solo il formato di seguito:

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

In questo modo presumo io uso Picasso come un Singleton. Io?

In secondo luogo, desidero utilizzare setIndicatorsEnabled. Tuttavia non può essere aggiunto al formato sopra poiché non è un metodo statico. C'è un modo per utilizzare questa funzione nel formato sopra?

In terzo luogo, se è necessario creare un'istanza personalizzata utilizzando Picasso.Builder(...).build() per utilizzare setIndicatorsEnabled, qual è il modo migliore per ottenere l'utilizzo singleton attraverso le attività dell'app?

+3

'Do I?': vedere https://github.com/square/picasso/blob/master/picasso/src/main/java/com/squareup/picasso/Picasso.java# L591 (si) – njzk2

+2

'setIndicatorsEna bled': 'with' restituisce un'istanza. chiama 'setIndicatorsEnabled' su quell'istanza – njzk2

risposta

10

Sì, è assumere Picasso è un esempio Singleton quando si utilizza Picasso.with (contesto) ....

utilizzare il set di indicatori abilitato

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

se si utilizza il costruttore è necessario creare la tua possedere singleton per tenere la tua istanza di Picasso e ripulirla quando hai finito. Non utilizzare builder ogni volta che usi Picasso perché crea una nuova istanza. Credo che Picasso.with (contesto) prenda solo il tuo contesto e chiama getApplicationContext e memorizzi un'istanza singleton di picasso con il contesto dell'applicazione.

3

Ecco un buon modo per implementare un singoletto Picasso classe

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; 
    } 
} 

E poi l'implementazione di esso nel codice sarebbe il seguente:

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() { 

     } 
    }); 

Si noti che non c'è bisogno di implementare i callback se non necessario

+1

Se metti questa dichiarazione di ritorno al di fuori della tua clausola if-else e rimuovi il duplicato, il tuo codice sarà molto più pulito –

+2

Concordato, grazie .... non sempre codificato nel modo migliore la prima volta. .. –