亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

異步加載怎么開啟多線程?

我發現一個問題,使用異步加載圖片是單線程,不能同時加載多張圖片,而且必須要等前一個圖片加載完后才能開始加載后面一張,影響速度;而用多線程的話,多張圖片基本上都是同時加載出來的,速度效率快很多。那么問題來了,在異步加載中怎么使用多線程?

正在回答

2 回答

一直是多線程,在加載??!

for (int i = start; i < end; i++){??? 《====這里是for循環重復開啟多個task
? ?String url = NewsAdapter.URLS[i];
? ?//由緩存中得到bitmap
? ?Bitmap bitmap = getBitmapFormCache(url);
? ?if (bitmap == null){
? ? ? ?//當bitmap為空時,由AsyncTask進行加載,并在onPostExecute()方法中setImageBitmap
? ? ? ?NewsAsyncTask task = new NewsAsyncTask(url);
? ? ? ?task.execute(url);
? ? ? ?mAsyncTask.add(task);
? ?} else {
? ? ? ?//當bitmap不為空時,直接進行setImageBitmap
? ? ? ?ImageView imageView = (ImageView) mListView.findViewWithTag(url);
? ? ? ?imageView.setImageBitmap(bitmap);
? ?}
}

0 回復 有任何疑惑可以回復我~
public?View?getView(int?position,?View?convertView,?ViewGroup?parent)?{
????String?url?=?mData.get(position);
????ViewHolder?viewHolder?=?null;
????if?(convertView?==?null)?{
????????viewHolder?=?new?ViewHolder();
????????convertView?=?mInflater.inflate(R.layout.listview_item,?null);
????????viewHolder.imageView?=?(ImageView)?convertView.findViewById(R.id.iv_lv_item);
????????convertView.setTag(viewHolder);
????}?else?{
????????viewHolder?=?(ViewHolder)?convertView.getTag();
????}
????viewHolder.imageView.setTag(url);
????viewHolder.imageView.setImageResource(R.drawable.ic_launcher);
????mImageLoader.showImageByThread(viewHolder.imageView,?url);
????return?convertView;
}



private?class?ImgHolder?{
????public?Bitmap?bitmap;
????public?ImageView?imageView;
????public?String?url;
?
????public?ImgHolder(ImageView?iv,?Bitmap?bm,String?url)?{
????????this.imageView?=?iv;
????????this.bitmap?=?bm;
????????this.url?=?url;
????}
}



public void showImageByThread(final ImageView imageView, final String url) {

?

????mHandler = new Handler() {

????????@Override

????????public void handleMessage(Message msg) {

????????????ImgHolder holder = (ImgHolder) msg.obj;

????????????if (holder.imageView.getTag().equals(holder.url)) {

????????????????holder.imageView.setImageBitmap(holder.bitmap);

????????????}

????????}

????};

????new Thread() {

????????@Override

????????public void run() {

????????????Bitmap bitmap = getBitmapFromUrl(url);

????????????Message message = Message.obtain();

????????????message.obj = new ImgHolder(imageView, bitmap, url);

????????????mHandler.sendMessage(message);

????????}

????}.start();

}



0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
Android必學-異步加載
  • 參與學習       50616    人
  • 解答問題       333    個

了解Android中的異步加載處理方法,這是面試問的最多的知識點

進入課程

異步加載怎么開啟多線程?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號