在线程中使用httpGet将最新更新发送到网站

时间:2011-11-15 14:03:12

标签: android multithreading httpclient

我有以下问题:

  • 我的应用程序需要尽快通知网站更改
  • 这种情况可能发生得如此之快,以至于之前的网络请求尚未完全处理
  • 应用程序应始终至少发送最后一次webrequest(如果之前的webrequest丢失则无关紧要。)

我不确定如何以最佳方式做到这一点。我当前的方法如下,但给了我一个警告(“无效使用SingleClientConnManager:连接仍然分配。”)。我怀疑我可以重用这个连接,但不知道如何。使用 threadSafeConnManager 似乎不是解决方案,因为我只需要一个连接(我认为:))。

我应该如何针对我的需求优化代码?

下面代码中的runnable位于一个线程( webThread )中, webrequest 是一个设置为某个url的全局变量。设置变量后,将触发 webThread.run()

private Runnable mSyncInternet = new Runnable() {
    HttpClient httpClient = new DefaultHttpClient();
    HttpContext localContext = new BasicHttpContext();

    public void run() {

        HttpGet httpGet = new HttpGet(webrequest);
        try {
            HttpResponse response = httpClient.execute(httpGet, localContext);
        } catch (ClientProtocolException e) {
            sendMessageToUI(MSG_NO_INTERNET, 1);
        } catch (IOException e) {
            sendMessageToUI(MSG_NO_INTERNET, 1);
        }
    }
};

提前非常感谢!

1 个答案:

答案 0 :(得分:0)

就在今天,我找到了blog解决SingleClientConnManager问题的方法:

public static DefaultHttpClient getThreadSafeClient() {
    DefaultHttpClient client = new DefaultHttpClient();
    ClientConnectionManager mgr = client.getConnectionManager();
    HttpParams params = client.getParams();

    client = new DefaultHttpClient(new ThreadSafeClientConnManager(params, 
            mgr.getSchemeRegistry()), params);

    return client;
}

我试过了,它运作得很好!