У меня была аналогичная проблема - по сути, я получал NPE в асинхронной задаче после того, как пользователь уничтожил действие. После изучения проблемы с переполнением стека я принял следующее решение:
volatile boolean running;
public void onActivityCreated (Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
running=true;
...
}
public void onDestroy() {
super.onDestroy();
running=false;
...
}
Затем я периодически проверяю «если работает» в моем асинхронном коде. Я испытал это, и теперь я не могу «сломать» свою деятельность. Это прекрасно работает и имеет преимущество в том, чтобы быть проще, чем некоторые из решений, которые я видел на SO.