我有一些简单的问题.
我可以只使用AsyncTask对java进行长轮询吗?
class makepolling extends AsyncTask{ 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; }
当响应返回TIME OUT时,我如何再次提出请求?
最好的祝福.对不起,我的英语不好
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; } } }