2016-08-03 72 views
0

我一直在尋找一種方式來做一個單獨的線程畢加索,因爲它是從互聯網上加載它。我不知道如何確認。Picasso Image加載到多線程?

我的應用程序基本上是一個ListView與一個imageView和兩個textViews,我創建了一個CustomAdapter,它擴展了BaseAdapter以協助列表。這是我在我的適配器類都做:

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

} 

我想知道的是什麼:

1)執行以下操作使畢加索在一個單獨的線程加載圖像? (我讀這個地方並沒有真正意義的我,我希望你們會向我解釋。)

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

2)或根本

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

自動完成它在一個新的線程?

3)或者,這些都不是在一個新的線程中,我需要單獨做它?如果是,那又如何?

在此先感謝!

+0

'Picasso'在默認情況下在後臺線程中從Internet下載圖像。你想確認什麼? –

+0

是的,它使用分離的線程,而不是用於圖像加載的UI線程。 – anhtuannd

+0

畢加索在後臺線程下載,使用默認上下文並使用構建器...您永遠不會得到NetworkOnMainThreadException .. – Kushan

回答

0

Picasso默認情況下在後臺線程中從Internet下載圖像。這就是爲什麼我們使用這些庫進行圖像加載。