2016-08-03 85 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下载图像。这就是为什么我们使用这些库进行图像加载。