我的应用程序获取图像资源(列表视图中显示的用户对象的缩略图)。我创建了一个简单的下载管理器类,它接受图像的URL,使用单个线程获取它们,然后通知客户端图像视图它们已准备就绪。
我想知道是否有人们正在使用的已发布的经理课程?理想情况下,它会在内部使用ThreadPoolExecutor来允许一次下载多个(现在我的实现只是将单个内部工作线程的请求排队)。
我错过了网络上的任何实现。我想它会是这样的:
class DownloadManager {
DownloadManager(int poolSize);
void addRequest(String url);
void addObserver(Observer observer);
}
在内部,它有一个线程池,并且只要为任何已注册的观察者提取了资源,就会调用observer.notify(String downloadedUrl)。我可以把它放在一起,但我猜有人已经这样做了。
感谢您提供任何参考资料
答案 0 :(得分:0)
尝试使用asynktask看起来像这样:
public class HttpRequest {
private IHttpRequest delegate;
public <T extends IHttpRequest> HttpRequest(T delegate) {
this.delegate = delegate;
}
public void execute(String url){
new ManagerAsyncTask().execute(url);
}
private class ManagerAsyncTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet(params[0]);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
return httpclient.execute(httpget, responseHandler);
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if(result != null) {
delegate.executeAction(result);
}
}
}
}
和whois使用实现此接口
public interface IHttpRequest {
public void executeAction(String result); //this method execute the return of webservice
}
示例您的课程将是:
myClass extends Activyt implements IHttpRequest {
onCreate(){
new HttpRequest(this).make(http://.......); //here your start the download in background
}
public void executeAction(String result){
Log.i("Tag",result);
//here you make what you need with result of request
}
}