2013-01-01 78 views
0

如何創建隊列以下載大圖片... 我使用Service。隊列也是動態的。如果用戶開始下載3張圖片,我開始下載3張圖片的服務。但用戶可以添加更多的圖像下載,但我必須添加隊列,並逐一下載所有圖像。在Android中管理下載隊列

我可以在Service中使用處理程序嗎?我可以使用handler.sendMessage(msg1)handler.sendMessage(msg2)嗎?我不知道處理器handleMessage(msg)中的方法巧妙地維護隊列。

msg1msg2同時處理或隊列?如果一個一個地處理它,那麼它解決了我的問題(意味着msg2msg1完成後處理)。

或者是否有任何隊列管理過程可用?

這裏是我想讓下載圖片的隊列和我想要存儲的下載圖片ID,但是如果有任何隊列維護某個任務,那麼這個過程就會很棒而且很聰明的隊列。

Download files in queue in Android沒有讓我滿意。

需要幫助,謝謝。

回答

0

處理器本身管理這可以在Service使用郵件

的隊列。

我做樣本..我會在隊列中使用自定義的流程... 這裏是下載..

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Message msg = h.obtainMessage(); 
    msg.what = 0; 
    msg.obj = "url1"; 
    h.sendMessage(msg); 

    Message msg1 = h.obtainMessage(); 
    msg1.what = 1; 
    msg1.obj = "url2"; 
    h.sendMessage(msg1); 

    Message msg2 = h.obtainMessage(); 
    msg2.what = 2; 
    msg2.obj = "url2"; 
    h.sendMessage(msg2); 

    Message msg3 = h.obtainMessage(); 
    msg3.what = 3; 
    msg3.obj = "url3"; 
    h.sendMessage(msg3); 
} 

Handler h = new Handler() { 

    @Override 
    public void handleMessage(Message msg) { 
     Log.e("", "handleMessage(msg) " + msg.what); 
     download("" + System.currentTimeMillis(), "" + msg.obj); 
     super.handleMessage(msg); 
    } 
}; 

private void download(String name, String link) { 

    try { 

     // Debug.e("", photo.imagename); 
     URL url = new URL(link); 
     HttpGet httpRequest = new HttpGet(url.toURI()); 

     HttpClient httpclient = new DefaultHttpClient(); 
     HttpResponse response = (HttpResponse) httpclient 
       .execute(httpRequest); 

     HttpEntity entity = response.getEntity(); 
     BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity); 
     InputStream input = bufHttpEntity.getContent(); 

     File outPutFile = new File(
       Environment.getExternalStorageDirectory(), name); 
     OutputStream output = new FileOutputStream(outPutFile); 

     try { 
      byte[] buffer = new byte[1024]; 
      int bytesRead = 0; 
      while ((bytesRead = input.read(buffer, 0, buffer.length)) >= 0) { 
       output.write(buffer, 0, bytesRead); 
      } 

     } finally { 
      output.close(); 
      input.close(); 
     } 

     // Toast.makeText(mContext, "Download completed", 
     // Toast.LENGTH_SHORT).show(); 

     // incrementCounter(Constant.ACTION_DOWNLOADS, photo.iid); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 
} 

其他最佳做法表示歡迎...