Android长轮询-执行服务超时

标签 android asynchronous comet long-integer polling

我正在尝试在我的 Android 应用程序中实现 LongPolling。 Long Polling

如果 LongPolling 需要很长时间才能得到答案,我的 Android 服务就会崩溃。

我尝试使用线程和异步。一般来说,我尝试了很多工作人员,但我没有得到它。

public class PollingService extends Service {

String TAG = "AndroidPolling";
int CONNECTION_TIMEOUT = 900000;
int mHeartbeat = 10000;
int TIMEOUT_TOLERANCE = 5000;
String mPushURL = "http://192.168.0.115:8080/de.test.jersey.cti/rest/todos/";


@Override
public void onCreate() {
    super.onCreate();    
    Log.i( TAG, "RestService Service-Class created");  

}

   public void onStart(Intent intent, int startId) {
    Log.i(TAG, "onStart"); 

    new makepolling().doInBackground("http://192.168.0.115:8080/de.test.jersey.cti/rest/todos/");

}


@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}
}

class makepolling extends AsyncTask<String, String, String> {

String TAG = "AndroidPolling";
int CONNECTION_TIMEOUT = 900000;
int mHeartbeat = 10000;
int TIMEOUT_TOLERANCE = 5000;
String mPushURL = "http://192.168.0.115:8080/de.test.jersey.cti/rest/todos/";

@Override
protected String doInBackground(String... arg0) {
    String result = null;
    DefaultHttpClient def = new DefaultHttpClient();
    HttpParams httpParams = def.getParams();
    HttpConnectionParams.setConnectionTimeout(httpParams, CONNECTION_TIMEOUT);

    ConnManagerParams.setTimeout(httpParams, CONNECTION_TIMEOUT);
    HttpGet httpGet = new HttpGet(mPushURL);
    httpGet.addHeader("Accept", "application/json");

    try {
        Log.i(TAG, "Executing GET(PUSH) request " + httpGet.getRequestLine());

        HttpResponse httpResponse = def.execute(httpGet);
        Log.i(TAG, result);
        Log.i(TAG, String.valueOf(httpResponse.getProtocolVersion()));
        Log.i(TAG, String.valueOf(httpResponse.getEntity().getContent())); //For testing purposes


    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return result;

}

@Override
protected void onPostExecute(String result) {
    // TODO Auto-generated method stub

    super.onPostExecute(result);
}

}

最佳答案

您不应显式调用 doInBackground()。要启动 AsyncTask,您必须创建它的实例并调用它的execute() 方法。 This文章很好地解释了 AsyncTask。

关于Android长轮询-执行服务超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5598333/

相关文章:

android - 日期选择器仅显示在 android 中选择的年份

java - 从通用对象访问字段变量

multithreading - 该程序产生了多少个线程(geturls9.hs)

tomcat - Cloudfoundry,默认协议(protocol)

java - Windows 是否为在同一 jvm 中运行的两个程序使用相同的端口进行传出连接?

javascript - 按下后退按钮时完成所有 Activity

android - 就像素而言,我可以制作多大的 Android 应用程序 Canvas ?

java - 从调用者类停止异步 Spring 方法

c# - 如何使用同步方法将异步方法的返回值传递到同步类中

jquery - 需要帮助设置 cometd 代码