Android 在线程中使用httpGet向网站发送最新更新

Android 在线程中使用httpGet向网站发送最新更新,android,multithreading,httpclient,Android,Multithreading,Httpclient,我有以下问题: 我的应用程序需要尽快通知网站更改 这可能发生得太快,以至于之前的webrequest还没有完全处理 应用程序应始终至少发送最后一个webrequest。如果以前的webrequest丢失,这并不重要。 我不知道如何以最佳方式实现这一点。我的当前方法如下所示,但警告我SingleClientConnManager的使用无效:连接仍已分配。。我怀疑我可以重用此连接,但不知道如何重用。使用threadSafeConnManager似乎不是解决方案,因为我认为我只需要一个连接: 我应该如

我有以下问题:

我的应用程序需要尽快通知网站更改 这可能发生得太快,以至于之前的webrequest还没有完全处理 应用程序应始终至少发送最后一个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);
        }
    }
};
非常感谢

就在今天,我找到了一个解决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;
}

我试过了,效果非常好

如果我理解正确,这会将连接最多旋转20次。如果可能的话,我想我会使用一个连接。另外,我不确定是否可以得到最后一个webrequest作为最后一个发送。但我会努力的,谢谢你暂停如果您只想使用一个连接,请确保在重用该连接之前使用了所有响应正文。threadsafeclientconnmanager选项会使我的应用程序无响应。我将看看如何重用该连接。你对我目前的线程结构有什么建议吗?因为我不确定这是不是最好的方式,也许你有太多的连接,他们需要一段时间才能被释放检查你的日志。然后,您的选择是确保在启动另一个请求之前完成一个请求,也许使用SharedReferences您可以实现这一点。