对不起我的英文。Android的内存泄漏,因为HttpClient
我正在开发一个Android应用程序,包含各种活动和由“主要”活动激活的服务。该服务每隔3秒钟检查一次(此间隔是任意的),以检查手机中的活动网络连接。如果我的本地网络内部连接了一台PC,那么我会打电话给那里的网络服务器。
的问题是,我试图通过这个功能来达到PC主机:
public boolean checkNet() {
HttpClient client;
HttpPost postMethod;
HttpParams httpParams;
URI uri;
try {
uri = new URI(Const.HOST_ADDRESS);
postMethod = new HttpPost(uri);
postMethod.addHeader("Content-Type", "text/xml");
httpParams = postMethod.getParams();
HttpConnectionParams.setSoTimeout(httpParams, 1000);
HttpConnectionParams.setSocketBufferSize(httpParams, 512);
HttpConnectionParams.setStaleCheckingEnabled(httpParams, false);
HttpConnectionParams.setConnectionTimeout(httpParams, 1000);
client = new DefaultHttpClient();
}
catch (URISyntaxException use) {}
try
{
client.execute(postMethod);
return true;
}
catch (ClientProtocolException cpe) {
}
catch (IOException e) {
}
return false;
}
我使用这种方法,而不是检查WifiManager的和内部的Android方法,因为我有这样的情况:我可以被连接到一个开放加密的AP,但它有一个登录系统(coova)。在这里,我可以关联(并且在局域网内有一个IP),但是如果我没有登录,我将无法访问任何网络,所以我必须实现一个“网络检查包装器”。
因此,如果执行功能出现异常,因为我的主机无法访问,DDMS将向我展示堆大小和分配大小如何在没有控制的情况下增长。我怀疑这是因为里面的“执行”的分话费不正常关闭过时的参考...例如,这里的分配跟踪器的例子:
java.lang.AbstractStringBuilder enlargeBuffer AbstractStringBuilder.java 99 false
java.lang.AbstractStringBuilder append0 AbstractStringBuilder.java 170 false
java.lang.StringBuilder append StringBuilder.java 224 false
org.apache.http.conn.HttpHostConnectException <init> HttpHostConnectException.java 48 false
org.apache.http.impl.conn.DefaultClientConnectionOperator openConnection DefaultClientConnectionOperator.java 133 false
org.apache.http.impl.conn.AbstractPoolEntry open AbstractPoolEntry.java 164 false
org.apache.http.impl.conn.AbstractPooledConnAdapter open AbstractPooledConnAdapter.java 119 false
org.apache.http.impl.client.DefaultRequestDirector execute DefaultRequestDirector.java 348 false
在此先感谢。
HOLA pacorro,Const.HOST_ADDRESS是一个可下载的文件或只是一个网页?你有最后一个android sdk和eclipse版本吗? – Jorgesys 2010-08-25 20:40:19