首页 > 解决方案 > 停止 asynctask 被调用两次

问题描述

我发现我的 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 类中(即在同一个文件中)时,在 PreExecute 中设置 isloading = true 没有问题,如下所示:

  @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。

请问有什么帮助吗?

标签: androidandroid-asynctask

解决方案


微不足道的只是在调用代码中设置 isLoading xhecking 值。

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

只要只有一个线程可以调用启动异步线程的 coad,它就可以工作。如果多个线程可以,那么您需要像同步块一样移动到锁。


推荐阅读