欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android 實(shí)現(xiàn)單線程輪循機(jī)制批量下載圖片

 更新時(shí)間:2017年07月24日 09:12:50   作者:小_練  
這篇文章主要介紹了Android 單線程輪循機(jī)制批量下載圖片的相關(guān)資料,這里對(duì)實(shí)現(xiàn)步驟做了詳細(xì)介紹,需要的朋友可以參考下

Android 實(shí)現(xiàn)單線程輪循機(jī)制批量下載圖片

listview 在為item 添加從網(wǎng)上下載下來的圖片時(shí), 如果每次都整合一個(gè)item時(shí)都需要new一個(gè)Thread去下載圖片,listview長(zhǎng)時(shí)間滑動(dòng)時(shí)會(huì)產(chǎn)生大量線程。

用單線程輪循機(jī)制則可以解決這個(gè)問題

步驟如下:

1、需要一個(gè)任務(wù)集合

class imageViewTask{ 
  String path; 
  Bitmap bitmap; 
  int position; 
 } 

// 任務(wù)集合 

 private List<imageViewTask> imageviews = new ArrayList<MusicAdapter.imageViewTask>(); 

2、在構(gòu)造方法中創(chuàng)建一個(gè)線程,通過任務(wù)集合中的path去網(wǎng)上下載圖片獲得bitmap并放置在這個(gè)任務(wù)中以Message的obj形式傳送給handler處理。

只有在為listview設(shè)置適配器時(shí)才需要?jiǎng)?chuàng)建這個(gè)工作線程, 且只有一個(gè)

(while(true)循環(huán) 在activity  調(diào)用OnDestroy )才會(huì)終止

// 獲得圖片bitmap 
  workThread = new Thread(){ 
   public void run() { 
    while(isLoop){ 
     if(!imageviews.isEmpty()){ 
      try { 
       Message msg = new Message(); 
   // 獲得圖片的bitmap 
       msg.obj = GetImageviewBitmap(); 
       msg.what = HANDLER_LOAD_IMAGEVIEW_SUCCESS; 
   // 發(fā)消息給主線程 
       handler.sendMessage(msg); 
        
      } catch (IOException e) { 
       e.printStackTrace(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
       
     }else{ 
      synchronized (workThread) { 
       try { 
        //任務(wù)隊(duì)列為空則等待 
        workThread.wait(); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
      
    } 
//GetImageviewBitmap()方法 

// 獲得圖片的bitmap 
   private imageViewTask GetImageviewBitmap() throws Exception, IOException { 
    imageViewTask ivt = imageviews.remove(0); 
    String uri = BasicUri.BasicHttpUri+ivt.path;  
    HttpEntity entity = new HttpUtils().SetHttp(uri, HttpUtils.GET_METHOD, null); 
    byte[] bytes = EntityUtils.toByteArray(entity); 
    Bitmap bitmap = BitmapUtils.loadBitmap(bytes, 50, 50); 
    // 將網(wǎng)上下載的圖片存入緩存集合中 
    map.put(ivt.path, new SoftReference<Bitmap>(bitmap)); 
     
    ivt.bitmap = bitmap; 
    return ivt; 
   } 
  }; 
  workThread.start(); 
 } 

這個(gè)是httpUtils工具

public class HttpUtils { 
  
 public final static int GET_METHOD = 1; 
 public final static int POST_MEHTOD = 2; 
  
 /** 
  * 構(gòu)造方法 
  * @param uri 路徑 
  * @param method 發(fā)送消息模式 GET_METHOD用get方式傳送消息 POST_MEHTOD用post方式傳送消息 
  */ 
 public static HttpEntity SetHttp(String uri, int method, List<NameValuePair> pairs) throws Exception{ 
  HttpClient client=new DefaultHttpClient(); 
  HttpResponse resp = null; 
  switch (GET_METHOD) { 
  // 用get方式發(fā)送消息 
  case GET_METHOD: 
   HttpGet get=new HttpGet(uri); 
   resp=client.execute(get); 
   break; 
  // 用post方式發(fā)送消息 
  case POST_MEHTOD: 
   HttpPost post=new HttpPost(uri); 
   HttpEntity entity=new UrlEncodedFormEntity( pairs, "utf-8"); 
   post.setEntity(entity); 
   post.setHeader("Content-Type", 
     "application/x-www-form-urlencoded"); 
   resp=client.execute(post); 
   break; 
  } 
  return resp.getEntity(); 
 } 
 } 

3、在自定義adapter 的setView方法中在任務(wù)中放置圖片下載的path和position, 并為item中的imageview設(shè)置標(biāo)記, 為了在listview的item中放入圖片時(shí)的方便。

// 給imageview設(shè)置標(biāo)記 
  holder.iv.setTag(position); 
// 增加任務(wù)隊(duì)列 
  imageViewTask task = new imageViewTask(); 
  task.path = musics.get(position).getAlbumpic(); 
  task.position = position; 
  imageviews.add(task); 
  // 通知工作線程可以下載圖片了 
  synchronized (workThread) { 
   workThread.notify(); 
  } 

4、傳送消息給主線程,讓hanler去更新UI

// handler 
 private Handler handler = new Handler(){ 
  public void handleMessage(android.os.Message msg) { 
   switch (msg.what) { 
   case HANDLER_LOAD_IMAGEVIEW_SUCCESS: 
     // 更新UI 
     imageViewTask ivt = (imageViewTask) msg.obj; 
     ImageView iv = (ImageView) listview.findViewWithTag(ivt.position); 
     if(iv != null){ 
      if(ivt.bitmap != null) 
       iv.setImageBitmap(ivt.bitmap); 
     }else{ 
      iv.setImageResource(R.drawable.ic_launcher); 
     } 
     
    break; 
 
   } 
  }; 
 }; 



以上就是使用Android 批量下載圖片的講解,如有疑問請(qǐng)留言或者到本站社區(qū)進(jìn)行交流討論,大家共同進(jìn)步,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • Android自定義View實(shí)現(xiàn)拼圖小游戲

    Android自定義View實(shí)現(xiàn)拼圖小游戲

    這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)拼圖小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • Android實(shí)現(xiàn)微信聊天語(yǔ)言點(diǎn)擊喇叭動(dòng)畫效果

    Android實(shí)現(xiàn)微信聊天語(yǔ)言點(diǎn)擊喇叭動(dòng)畫效果

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)微信聊天語(yǔ)言點(diǎn)擊喇叭動(dòng)畫效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Android 使用 ViewPager循環(huán)廣告位的實(shí)現(xiàn)

    Android 使用 ViewPager循環(huán)廣告位的實(shí)現(xiàn)

    本文給大家分享android使用 ViewPager循環(huán)廣告位的實(shí)現(xiàn),感興趣的朋友一起學(xué)習(xí)吧
    2015-11-11
  • 解析Android框架之Volley源碼

    解析Android框架之Volley源碼

    我們知道Volley是在2013年Google I/O大會(huì)上推出了一個(gè)新的網(wǎng)絡(luò)通信框架,他的設(shè)計(jì)目的就是為了那些請(qǐng)求數(shù)據(jù)量不是特別大,但是又是特別頻繁的網(wǎng)絡(luò)操作非常適合。但是對(duì)于數(shù)據(jù)量較大的請(qǐng)求,比如說下載一個(gè)較大的文件,Volley可能相比于其他的框架,就有點(diǎn)不足了。
    2021-06-06
  • 使用Android Studio 開發(fā)自己的SDK教程

    使用Android Studio 開發(fā)自己的SDK教程

    很多時(shí)候我們要將自己開發(fā)一個(gè)類庫(kù)打包成jar包以供他調(diào)用,這個(gè)jar包也叫你自己的SDK或者叫l(wèi)ibrary。android studio生成jar包的方法與eclipse有所不同。在studio中l(wèi)ibrary其實(shí)是module的概念。
    2017-10-10
  • Android neon 優(yōu)化實(shí)踐示例

    Android neon 優(yōu)化實(shí)踐示例

    這篇文章主要為大家介紹了Android neon 優(yōu)化實(shí)踐示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Android Studio徹底刪除項(xiàng)目 Android Studio徹底刪除Module

    Android Studio徹底刪除項(xiàng)目 Android Studio徹底刪除Module

    這篇文章主要為大家詳細(xì)介紹了Android Studio徹底刪除項(xiàng)目,Android Studio徹底刪除Module,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • 詳解Android Studio中Git的配置及協(xié)同開發(fā)

    詳解Android Studio中Git的配置及協(xié)同開發(fā)

    這篇文章主要介紹了詳解Android Studio中Git的配置及協(xié)同開發(fā),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • Android多線程下載示例詳解

    Android多線程下載示例詳解

    這篇文章主要為大家詳細(xì)介紹了Android多線程下載示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Android實(shí)現(xiàn)銀行卡、手機(jī)號(hào)帶空格格式

    Android實(shí)現(xiàn)銀行卡、手機(jī)號(hào)帶空格格式

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)銀行卡、手機(jī)號(hào)帶空格的格式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12

最新評(píng)論