2013-01-01 57 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(); 
    } 

} 
} 

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