¿Cómo cancelar un Android AsyncTask después de una cierta cantidad de tiempo? (Por ejemplo, 10 segundos)

Quiero utilizar un AsyncTask para comprobar un InetAddress, como en el código de abajo. La variable tempInet es una variable global que indica si el sitio web fue contactable o no.

Comienzo el AsyncTask con el código … new InetAsyncTask (). Execute ("www.facebook.com");

Mi problema es que quiero que el AsyncTask se cancele después de (digamos) 10 segundos.

Algunas otras preguntas sugieren usar el método get (10, TimeUnit.SECONDS). Me gustaría hacer esto pero no sé dónde / cómo poner el método get. ¿Con ejecutar? ¿En el método doInBackground?

Además, ¿el método get () bloquea el subproceso principal? Si lo hace, ¿cuál es el punto de ella?

Cualquier ayuda apreciada.

class InetAsyncTask extends AsyncTask<String, String, Boolean> { @Override protected Boolean doInBackground(String... params) { try { InetAddress.getByName("www.facebook.com"); return true; } catch (UnknownHostException e) { return false; } } //end doInBackground function protected void onPostExecute(Boolean... result) { tempInet = result[0]; } } //end class 

preguntas relacionadas

Android – ¿Configurar un tiempo de espera para un AsyncTask?

Detener la tarea asíncrona después de 60 segundos

Desarrolladores de Android AsyncTask Documentación

Http://developer.android.com/reference/android/os/AsyncTask.html

Debe hacer un controlador que cancela el Asynctask (http://developer.android.com/reference/android/os/AsyncTask.html#cancel(boolean))

Enviar un mensaje retrasado a este controlador como:

 Handler.sendMessageDelayed(msg, delayMillis) private android.os.Handler mHandler = new android.os.Handler() { @Override public void handleMessage(Message msg) { (Your AsyncTask object).cancel(true); } } 

Para responder tu pregunta. El código para usar con get () es el siguiente:

 Boolean isHost = new AsyncTask<String, Void, Boolean>() { @Override protected Boolean doInBackground(String... params) { try { InetAddress.getByName(params[0]); return true; } catch (UnknownHostException e) { return false; } } }.execute("www.facebook.com").get(PING_TIME, TimeUnit.MILLISECONDS); 

El método get bloquea el hilo de la persona que llama, siempre y cuando el resultado deba ser devuelto. Por lo tanto, sólo debe utilizarlo en situaciones de prueba. Si desea obtener una respuesta asíncrona, inicie lo siguiente (este es uno de mis ejemplos, tendrá que cambiarlo para su propósito):

 private AsyncTask<Void, Void, Boolean> mAsyncTask; private android.os.Handler timeHandler = new android.os.Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); // react here or... mAsyncTask.cancel(true); } }; public void pingServer() { timeHandler.sendEmptyMessageDelayed(1, PING_TIME); mAsyncTask = new AsyncTask<Void, Void, Boolean>() { @Override protected Boolean doInBackground(Void... params) { // stop the time handler timeHandler.removeMessages(1); return restService.pingServer(); } @Override protected void onPostExecute(Boolean isOnline) { super.onPostExecute(isOnline); // use result after execution (eg: send to callback) } @Override protected void onCancelled(Boolean aBoolean) { super.onCancelled(aBoolean); // ...react here } }.execute(); } 
  • Android Honeycomb: Fragmento no puede iniciar AsyncTask?
  • Acceso a GoogleMap desde fuera del hilo de la interfaz de usuario en Android
  • Java.lang.IllegalStateException: No se puede realizar esta acción después de onSaveInstanceState
  • Facebook autoriza que no funcione dentro de Android Asynctask o Thread
  • Android Async tarea ralentizar mi UI Hilo
  • Android ¿Cómo volver a conectar a AsyncTask después onDestroy () y relanzar onCreate ()?
  • Quiero reproducir un audio. ¿Utilizo Thread, AsyncTask o Service?
  • Cómo pasar datos de AsyncTask a Ui Thread
  • Cómo obtener el resultado de OnPostExecute () en la actividad principal porque AsyncTask es una clase aparte?
  • Android AsyncTask - Orden de ejecución
  • ¿Cómo es que Android AsyncTask no implementa el futuro?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.