如何制作下载大图片的队列......
我使用了Service
。队列也是动态的。如果用户开始下载3张图像,我开始下载3张图像的服务。但是用户可以添加更多图像供下载,但我必须添加队列并逐个下载所有图像。
我可以在Service
中使用处理程序吗?我可以使用handler.sendMessage(msg1)
和handler.sendMessage(msg2)
吗?我不知道处理程序handleMessage(msg)
中的方法是否能够巧妙地维护队列。
msg1
和msg2
是同时处理还是在队列中处理?如果它被逐个处理,那么它解决了我的问题(在msg2
完成后处理msg1
}。
或者是否有可用的队列管理流程?
这里是我想要下载图像的队列以及我想要存储的下载图像ID,但是如果有任何队列维护某些任务,则处理它将是一个很棒且聪明的队列。
Download files in queue in Android并没有让我满意。
需要帮助,谢谢。
答案 0 :(得分: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();
}
}
}
欢迎其他最佳做法......