Ho avuto un problema simile - essenzialmente stavo ottenendo un NPE in un task asincrono dopo che l'utente aveva distrutto il frammento. Dopo aver studiato il problema su Stack Overflow, ho adottato la seguente soluzione:
volatile boolean running;
public void onActivityCreated (Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
running=true;
...
}
public void onDestroy() {
super.onDestroy();
running=false;
...
}
Poi, verifico "se in esecuzione" periodicamente nel mio codice asincrono. Ho provato questo stress e ora non sono in grado di "interrompere" la mia attività. Questo funziona perfettamente e ha il vantaggio di essere più semplice di alcune delle soluzioni che ho visto su SO.
dopo aver usato in questo modo YourAsynchTask mTask = new YourAsncTask(); mTask.execute(); lavorato. simpatico. – Senthil
È un po 'fastidioso, però, che non si può davvero annullare se si ottiene una singola operazione (come una query di database), ad esempio. Se la query richiede molto tempo ed è solo una chiamata, sembra che non ci sia modo di cancellarla:/ – AgentKnopf
Se stai facendo qualcosa all'interno di AsyncTask (in un loop), allora potresti voler controllare isCancelled() - refer https://stackoverflow.com/questions/10882543/how-to-completly-kill-remove-delete-stop-an-asynctask-in-android – amar