Ho un AsyncTask che ho interrotto durante l'evento del ciclo di vita di onPause di Activity, quindi non viene eseguito quando qualcuno lascia l'app, ma continua a funzionare nonostante questo. Ho aggiunto alcune tracce e questo frammento mostra il problema.AsyncTask Android non si fermerà quando viene annullato, perché?
Trace.d(TAG,"Task state: " + myTask.getStatus());
myTask.cancel(true);
Trace.d(TAG,"Task state: " + myTask.getStatus());
Uscite:
Task state: RUNNING
Task state: RUNNING
Perché la cancel() metodo non avere alcun effetto sullo stato del compito? Ho notato che i documenti dicono che il metodo di cancellazione "tenterà" di interrompere l'attività, ma in quali circostanze fallirà? L'attività è sicuramente in esecuzione poiché emette l'output del registro ogni dieci secondi e, come puoi vedere sopra, il suo stato viene restituito come in esecuzione.
Aggiornamento: ho aggiunto la traccia per mostrarmi anche lo stato isCancelled() e che cambia. Quindi la chiamata per annullare (true) sta cambiando lo stato cancellato da falso a vero, ma apparentemente non ha alcun effetto sullo stato, o interrompe il thread.
C'è un modo per il ciclo all'interno dell'attività per verificare se l'attività è stata annullata e semplicemente uscire dal ciclo? –
Qual è il valore di ritorno da annullare? Ti ha detto che lo ha cancellato? –
@Joel Sì, posso farlo, ma poiché uso il metodo cancel() in altri posti, voglio capire perché non sta facendo ciò che mi aspetto che sia –