перестань вызываться дважды - PullRequest
0 голосов
/ 31 января 2020

Я обнаружил, что мой AsyncTask вызывается дважды. Чтобы остановить это, в моем MainActivity я определил

 public Boolean isloading = false;

и asynctask называется:

   if (!isloading) {
      new GetFlickr(MainActivity.this, imageViewWeakReference, MainActivity.this)
          .execute(Double.toString(Lat), Double.toString(Long));
    }

Когда asynctask был внутри класса MainActivity (т.е. в том же файле ), не было проблем с установкой isloading = true в PreExecute, например:

  @Override
    protected void onPreExecute() {
      super.onPreExecute();
      pBar = new ProgressBar(getApplicationContext());
      pBar = findViewById(R.id.progressBar);
      pBar.setProgress(0);
      pBar.setVisibility(View.VISIBLE);
      isloading = true;
    }

Но я переместил asynctask в отдельный файл и не могу установить для него значение true.

Любая помощь, пожалуйста?

1 Ответ

0 голосов
/ 31 января 2020

Тривиальная вещь - просто установить isLoading, проверяя значение в вызывающем коде.

if (!isloading) {
      isLoading = true
      new GetFlickr(MainActivity.this, imageViewWeakReference, MainActivity.this)
          .execute(Double.toString(Lat), Double.toString(Long));
}

Это работает до тех пор, пока только один поток может вызвать coad, запускающий асиновый поток c , Если несколько потоков могут, вам нужно перейти к блокировке, как синхронизированный блок.

...