2016-08-03 16 views
0

Ich habe mich nach einem Weg um Picasso in einem separaten Thread zu suchen, wie es aus dem Internet geladen wird. Ich habe keine Ahnung, wie ich das bestätigen kann.Picasso Image Wird in Multithread geladen?

Meine App ist im Grunde ein ListView mit einem imageView und zwei textViews und ich habe einen CustomAdapter erstellt, der BaseAdapter erweitert, um die Liste zu unterstützen. Dies ist, was ich in meiner Adapter-Klasse getan habe:

public class CustomAdapter extends BaseAdapter 
{ 
public String title[]; 
public String description[]; 
public String images[]; //Image URLs 
private static Picasso instance; 
public Activity context; 
public LayoutInflater inflater; 


public CustomAdapter(Activity context, String[] title, String[] description, String[] images) { 
    super(); 

    this.context = context; 
    this.title = title; 
    this.description = description; 
    this.images = images; 

    this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return title.length; 
} 

@Override 
public Object getItem(int position) { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    return 0; 
} 

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; 
    } 
    else 
    { 
     return instance; 
    } 
} 

public static class ViewHolder 
{ 
    ImageView icon; 
    TextView itemNameTextView; 
    TextView itemDescriptionTextView; 

} 


@Override 
public View getView(int position, View view, ViewGroup parent) { 
    // TODO Auto-generated method stub 

    Debug.startMethodTracing("ThreadCheck"); 
    ViewHolder holder; 
    if(view==null) 
    { 
     holder = new ViewHolder(); 
     view = inflater.inflate(R.layout.list_item, null); 

     holder.icon = (ImageView) view.findViewById(R.id.DownloadedImage); 
     holder.itemNameTextView = (TextView) view.findViewById(R.id.ItemNameTextView); 
     holder.itemDescriptionTextView = (TextView) view.findViewById(R.id.ItemDescriptionTextView); 

     view.setTag(holder); 
    } 
    else 
     holder=(ViewHolder)view.getTag(); 


    Picasso.with(context).load(images[position]).into(holder.icon); 

    holder.itemNameTextView.setText(title[position]); 
    holder.itemDescriptionTextView.setText(description[position]); 

    return view; 
} 

} 

Was ich wissen wollte, war:

1) Hat der folgende macht Picasso das Bild in einem separaten Thread zu laden? (Ich las diese irgendwo und es nicht wirklich Sinn für mich und ich hoffe, ihr es mir erklären würden.)

instance = new Picasso.Builder(context).executor(Executors.newSingleThreadExecutor()).memoryCache(Cache.NONE).indicatorsEnabled(true).build(); 

2) Oder habe

Picasso.with(context).load(images[position]).into(holder.icon); 

automatisch tun es in einem neuen Thread?

3) Oder tut es keiner von denen in einem neuen Thread und ich muss es separat machen? Wenn ja, wie?

Vielen Dank im Voraus!

+0

'Picasso' lädt Bilder aus dem Internet in einem Hintergrund-Thread standardmäßig herunter. Was möchtest du bestätigen? –

+0

Ja, es wird ein separater Thread anstelle des UI-Threads zum Laden von Bildern verwendet. – anhtuannd

+0

Picasso Downloads in einem Hintergrund-Thread, sowohl mit Standard-Kontext und mit einem Builder ... Sie werden nie eine NetworkOnMainThreadException .. – Kushan

Antwort

0

Picasso lädt standardmäßig Bilder aus dem Internet in einem Hintergrundthread herunter. Deshalb verwenden wir solche Bibliotheken zum Laden von Bildern.