Я копнул глубже и вспомнил, что мой поток вызывал довольно плохо написанный метод, содержащий это, создавая другой поток внутри того, который мне нужно отменить:
public static void haveASleep(int milliseconds)
{
try
{
Thread.sleep(milliseconds);
}
catch (InterruptedException ie)
{
Trace.w(TAG,"Sleep interrupted");
}
}
Так что происходило то, что поток AsyncTaskвызывает этот метод, чтобы подождать некоторое время, и во время сна в методе AsyncTask происходит вызов метода cancel (), что вызывает исключение в спящем потоке.Мой код бесполезно перехватил и поглотил это исключение, вместо того, чтобы использовать его для выключения AsyncTask.
Решение состояло в том, чтобы искать исключение во сне, и, если оно выбрасывается, тихо выходить из потока.Приложение теперь работает как положено, НО ...
Состояние сразу после вызова метода cancel () остается РАБОТАЮЩИМ, но я подозреваю, что это потому, что в тот момент оно все еще работает, а ОС еще незакрой это.Я понятия не имею, правда ли это, но это моя лучшая оценка.