Voglio forzare l'annullamento di AsyncTask. Vedo che è possibile utilizzare isCancelled() come in this valid solution (che sotto il cofano utilizza AtomicBooleanPer forzare l'annullamento AsyncTask non dovrebbe essere volatile la flag periodicamente controllata in doInBackground?
Ma vedo soluzioni come suspiciousSolution1, suspiciousSolution2, suspiciousSolution3 dove c'è nuova bandiera introdotto private boolean isTaskCancelled = false;
E ho iniziato a chiedermi -.. In quanto tale flag è modificato in
public void cancelTask(){
isTaskCancelled = true;
}
che gira su un filo, ed è letto in
protected Void doInBackground(Void... ignoredParams) {
//Do some stuff
if (isTaskCancelled()){
return;
}
}
che viene eseguito in WorkerThread, quindi non dovrebbe la bandiera isTaskCancelled
essere volatile (o AtomicBoolean come nell'implementazione di Google).
sì, dovrebbe probabilmente essere volatili – thepoosh
Come da linee guida di Google, AsyncTask dovrebbe essere usato per fare molto piccola funzione. Non dovrebbe avere cicli più grandi o compiti più pesanti. Per tali funzionalità utilizzare Gestori e Servizio eseguibile o in background. La bandiera è presente ma verrà convalidata solo all'inizio della condizione if. L'attività può o non può annullare immediatamente come desiderato. – chejaras
Grazie, ma il tuo commento non risponde al quesiton. –