У меня есть действие, которое открывает настраиваемое диалоговое окно. Это настраиваемое диалоговое окно при создании запускает асинхронную задачу, которая загружает информацию, которая будет отображаться.
Если пользователь закрывает диалоговое окно, действие, приложение или что-либо еще до полной загрузки, я хочу, чтобы асинхронная задача прекратила загрузку.
Вот как я это делаю:
Активность:
new UsernamesListDialog().show(getSupportFragmentManager(), USERNAMES_LIST_DIALOG_TAG);
public class UsernamesListDialog extends AppCompatDialogFragment implements CompoundButton.OnCheckedChangeListener, View.OnClickListener, LoadFollowersTask.LoadFollowersListener {
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
new LoadFollowersTask(this, this.progressBar, this.progressCaption, APIFacade.getInstance().getLocalUser()).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, APIFacade.getInstance());
return v;
}
public class LoadFollowersTask extends AsyncTask<APIFacade, Integer, Set<BasicUser>> {
protected Set<BasicUser> doInBackground(APIFacade... api) {
while (loaded.size() < totalToLoad && this.listener.isAlive()) {
//load stuff
}
return result;
this.listener
- это собственный диалог, а метод isAlive()
:
public boolean isAlive(){
return this.isVisible();
}
Проблема:
Поскольку задачи асинхронные, LoadFollowersTask
может попасть в то время, пока диалоговое окно правильно не отобразится в интерфейсе, в этом случае задача остановится сама и вернет пустой результат.
Так что мне нужно переопределить isAlive
к чему-то, что будет возвращать true с момента создания диалога до его закрытия
Какой метод мне использовать?