gpt4 book ai didi

java - Android长轮询技术

转载 作者:行者123 更新时间:2023-12-01 06:44:11 25 4
gpt4 key购买 nike

我有一些简单的问题。
我可以仅使用 AsyncTask 在 java 上进行长轮询吗?

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

String TAG = "AndroidPolling";
int CONNECTION_TIMEOUT = 900000;
int mHeartbeat = 10000;
int TIMEOUT_TOLERANCE = 5000;
String mPushURL = "https://my_serv_adress/service";

@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);
HttpPost httpPost = new HttpPost(mPushURL);
httpPost.addHeader("Accept", "application/json");

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

HttpResponse httpResponse = def.execute(httpPost);
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;

}

当响应返回超时时,我如何再次发出请求?
此致。抱歉我的英语不好

最佳答案

AsyncTasks 用于相对较短的操作,因此如果您想要进行一些长轮询,您可能应该尝试不同的方法。如果您想定期进行网络调用,您可以在后台运行一个 Service

下面的代码可能对您有帮助。它只是每 10 秒执行一次的服务模板。请记住,网络调用需要在 UI 线程之外完成:

public class MyService extends Service {

private IBinder mBinder = new SocketServerBinder();
private Timer mTimer;
private boolean mRunning = false;

@Override
public void onCreate() {
super.onCreate();
mTimer = new Timer();
mTimer.schedule(new TimerTask() {

@Override
public void run() {

if (mRunning) {
// make your network call here
}
}
}, 10000, 10000);
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
mRunning = true;
return super.onStartCommand(intent, flags, startId);
}

@Override
public IBinder onBind(Intent arg0) {
mRunning = true;
return mBinder;
}

@Override
public boolean onUnbind(Intent intent) {
mRunning = false;
return super.onUnbind(intent);
}

public class SocketServerBinder extends Binder {

public MyService getService() {
return MyService.this;
}

}

}

关于java - Android长轮询技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20800189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com