나는 Picasso를 인터넷에서로드 할 때 별도의 스레드에서 수행하는 방법을 찾기 위해 주변을 둘러 보았습니다. 그것이 맞는지 확인하는 방법을 모른다.피카소 이미지 다중 스레드로로드 중입니까?
내 응용 프로그램은 기본적으로 하나의 imageView와 두 개의 textViews가있는 ListView이며 List를 지원하는 BaseAdapter를 확장 한 CustomAdapter를 만들었습니다. 이것은 내가 내 어댑터 클래스에서 수행 한 것입니다 : 내가 알고 싶어 무엇
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) 또는 이들 중 어느 것도 새 스레드에서 수행하지 않으며 별도로 수행해야합니까? 예, 그렇다면 어떻게됩니까?
미리 감사드립니다.
'Picasso'는 기본적으로 배경 스레드로 인터넷에서 이미지를 다운로드합니다. 그것에 대해 무엇을 확인하고 싶습니까? –
예, 이미지로드를 위해 UI 스레드 대신 분리 된 스레드를 사용합니다. – anhtuannd
백그라운드 스레드에서 Picasso가 기본 컨텍스트 및 빌더를 사용하여 다운로드 ... NetworkOnMainThreadException을받지 못합니다. – Kushan