Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Android AsyncTasks Cómo comprobar si la actividad aún se está ejecutando

He utilizado AsyncTasks con mi aplicación, con el fin de descargar perezoso y actualizar la interfaz de usuario.

Por ahora mi AsyncTasks actualiza la interfaz de usuario real simplemente:

 protected void onProgressUpdate(String... values) { super.onProgressUpdate(values); gender.setText(values[0]); } 

Mi problema es cómo comprobar si la actividad que el género TextView prestados, todavía está disponible?

Si no, obtendré un error y mi aplicación se cerrará.

  • IOS / Objective-C equivalente de Android AsyncTask
  • OnCreateView () espera que AsyncTask se ejecute?
  • Error al liberar APK con AsyncTask y Jsoup
  • Los hilos AsyncTask nunca mueren
  • No se puede acceder a "findViewById" en AsyncTask
  • Android AutoCompleteTextView con datos de un servicio web, problemas para mostrar la lista de sugerencias
  • Ejecutar AsyncTask varias veces
  • ¿Cómo puedo pasar un primitivo int a mi AsyncTask?
  • 8 Solutions collect form web for “Android AsyncTasks Cómo comprobar si la actividad aún se está ejecutando”

    Usted puede cancelar su asynctask en la actividad onDestroy

     @Override protected void onDestroy() { asynctask.cancel(true); super.onDestroy(); } 

    Y al realizar cambios usted comprueba si su asynctask ha sido cancelado (actividad destruida) o no

     protected void onProgressUpdate(String... values) { super.onProgressUpdate(values); if(!isCancelled()) { gender.setText(values[0]); } } 

    Tuve un problema similar – esencialmente estaba recibiendo un NPE en una tarea asíncrona después de que el usuario había destruido el fragmento. Después de investigar el problema en el desbordamiento de la pila, adopté la solución siguiente:

     volatile boolean running; public void onActivityCreated (Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); running=true; ... } public void onDestroy() { super.onDestroy(); running=false; ... } 

    Luego, compruebo "si se ejecuta" periódicamente en mi código asíncrono. He puesto a prueba esta prueba y ahora soy incapaz de "romper" mi actividad. Esto funciona perfectamente y tiene la ventaja de ser más simple que algunas de las soluciones que he visto en SO.

    Tratar

     if (!isFinishing()) { gender.setText(values[0]); } 

    Insistiré que usted que si la actividad no está funcionando porqué usted no cancela el AsyncTask? Eso sería una solución mejor y más factible. Si la aplicación está ejecutando decir que se mueven de una actividad a otra, entonces no dará error AFAIK.

    Pero, insistiría para cancelar el AsyncTask entonces you'r la actividad no está funcionando, usted puede comprobar AsyncTask está funcionando o no,

     if(task != null && task.equals(AsyncTask.Status.RUNNING)) task.cancel(true); 

    Sin embargo, nunca he enfrentado este escenario; Voy a tratar de responder a su pregunta.

    En su caso, tendrá que validar el Context pasado a AsyncTask .

    Puede realizar la validación

     if(null!=mContext) //Activity still exist!! { gender.setText(values[0]); } else //Activity is destroyed { //Take appropriate action!! } 

    La ventaja será, si la actividad se destruye en el momento en que llegue a esta declaración, su Context se convertirá automáticamente en null y se puede manejar el escenario.

    No debería

     if (gender) { gender.setText(values[0]); } 

    ¿bastar?

    Como sugiere esta parte de un entrenamiento en Android Developers , mantenga una WeakReference en el elemento de interfaz de usuario que debe actualizarse después de realizar la tarea y compruebe si la referencia es null antes de usarla. Esto ayuda no sólo a comprobar si la interfaz de usuario sigue estando, sino que también no impide que los elementos de la interfaz de usuario sean recolectados de basura.

    Compruebe si la actividad se está ejecutando o no

      if (!isFinishing()) { // Do whatever you want to do } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.