我已经看过很多例子,他们似乎都以不同的方式解决了这个问题.基本上我只想要最简单的方法来做出不会锁定主线程并且可以取消的请求.
我们(至少)有两个HTTP库可供选择,java.net.*(例如HttpURLConnection)和org.apache.http.*也没有帮助.
关于最佳实践是什么,是否有任何共识?
我正在创建一个Android应用程序,它必须在后台执行Web请求,然后处理接收的数据并根据服务器响应修改用户界面.
在后台发布请求和处理数据的目的是避免冻结用户界面.但是目前我注意到用户界面已经冻结,所以我不确定逻辑是否正常工作.
这是代码的一部分,它应该在自己的线程中发布请求和处理响应,然后将数据传递给GUI:
public class ServerConnection {
Queue<String> requests;
...
DefaultHttpClient httpClient;
HttpHost targetHost;
Handler handler;
ServerResponseHandler responseHandler;
Activity activity;
public ServerConnection(Activity activity){
this.activity = activity;
this.responseHandler = (ServerResponseHandler) activity;
httpClient = new DefaultHttpClient();
targetHost = new HttpHost(TARGET_DOMAIN, 80, "http");
requests = new LinkedList<String>();
}
private Runnable requestSender = new Runnable(){
@Override
public void run() {
if(!requests.isEmpty()){
String requestString = requests.remove();
HttpGet httpGet = new HttpGet(requestString);
httpGet.addHeader("Accept", "text/xml");
String encodingString = "testuser:testpass";
String sEncodedString = Base64Coder.encodeString(encodingString);
try{
String sContent = …
Run Code Online (Sandbox Code Playgroud)