【问题标题】:Manage downloading queue in android在android中管理下载队列
【发布时间】:2012-12-16 04:04:21
【问题描述】:

如何排队下载大图?我为此使用了Service。队列也是动态的。如果用户开始下载 3 张图片,我将启动下载 3 张图片的服务。但用户也可以添加更多图片以供下载,但我必须添加到队列中并一一下载所有图片。

我可以在Service 中使用处理程序吗?我可以使用handler.sendMessage(msg1)handler.sendMessage(msg2) 吗?我不知道处理程序handleMessage(msg)中的方法巧妙地维护队列。

msg1msg2 是同时处理还是在队列中处理?如果一一处理就解决了我的问题(意思是msg1完成后处理msg1)。

或者有没有可用的队列管理流程?

这是我想为下载图像创建队列以及我想存储的下载图像 ID,但如果有任何队列维护某些任务,处理那么它将是一个很棒且聪明的队列。

Download files in queue in Android 没有让我满意。

【问题讨论】:

    标签: android download queue message-queue


    【解决方案1】:

    处理程序本身管理消息队列

    这可以在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();
        }
    
     }
    }
    

    欢迎其他最佳做法...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      • 1970-01-01
      • 2014-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多