Обычно я звоню cancel(true)
в AsyncTask
и проверяю Thread.interrupted()
в doInBackground
. Вы можете проверить isCancelled()
, но это не сработает, если фактическая работа выполняется в каком-то другом классе, который не зависит от вашего AsyncTask
и не знает об этом. Например (скопировано непосредственно из моего собственного метода getData()
внутри моего класса Data
, независимо от каких-либо действий, асинхронных задач и т. Д.):
while ((line = reader.readLine()) != null) {
if (Thread.interrupted()) throw new InterruptedException();
content.append(line);
}
Просто убедитесь, что обработали InterruptedException
в вашем doInBackground()
, например ::
@Override
protected Integer doInBackground(String... params) {
try {
return getData();
}
catch (InterruptedException e) {
Log.d("MyApp", "Girl, Interrupted");
return -1;
}
}
Также стоит отметить, что onPostExecute()
не вызывается , если задача отменяется. Вместо этого вызывается onCancelled()
.