使用线程池下载管理器/ url fetcher?

时间:2011-12-15 23:43:17

标签: android

我的应用程序获取图像资源(列表视图中显示的用户对象的缩略图)。我创建了一个简单的下载管理器类,它接受图像的URL,使用单个线程获取它们,然后通知客户端图像视图它们已准备就绪。

我想知道是否有人们正在使用的已发布的经理课程?理想情况下,它会在内部使用ThreadPoolExecutor来允许一次下载多个(现在我的实现只是将单个内部工作线程的请求排队)。

我错过了网络上的任何实现。我想它会是这样的:

class DownloadManager {
    DownloadManager(int poolSize);
    void addRequest(String url);
    void addObserver(Observer observer);
}

在内部,它有一个线程池,并且只要为任何已注册的观察者提取了资源,就会调用observer.notify(String downloadedUrl)。我可以把它放在一起,但我猜有人已经这样做了。

感谢您提供任何参考资料

1 个答案:

答案 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
    }
}