2016-08-03 2 views
0

나는 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) 또는 이들 중 어느 것도 새 스레드에서 수행하지 않으며 별도로 수행해야합니까? 예, 그렇다면 어떻게됩니까?

미리 감사드립니다.

+0

'Picasso'는 기본적으로 배경 스레드로 인터넷에서 이미지를 다운로드합니다. 그것에 대해 무엇을 확인하고 싶습니까? –

+0

예, 이미지로드를 위해 UI 스레드 대신 분리 된 스레드를 사용합니다. – anhtuannd

+0

백그라운드 스레드에서 Picasso가 기본 컨텍스트 및 빌더를 사용하여 다운로드 ... NetworkOnMainThreadException을받지 못합니다. – Kushan

답변

0

Picasso 기본적으로 배경 스레드로 인터넷에서 이미지를 다운로드합니다. 이것이 우리가 이미지 로딩을 위해 그러한 라이브러리를 사용하는 이유입니다.

관련 문제