【问题标题】:stop asynctask being called twice停止 asynctask 被调用两次
【发布时间】:2020-01-31 19:33:41
【问题描述】:

我发现我的 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。

有什么帮助吗?

【问题讨论】:

  • 嗨,我已将 asynctask 移动到一个单独的文件中,并且无法在那里将值设置为 true 所以这是你真正的问题,你可以使用 SharedPreference将 true/false 设置为您的变量 isloading

标签: android android-asynctask


【解决方案1】:

简单的事情就是在调用代码中设置isLoading xhecking值。

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

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

【讨论】:

  • 这就是我目前的解决方案。但是,我认为(没有根据或证据),从 PreExecute 调用它可以确保不会被调用两次。问题是,我不确定 AsyncTask 是否被调用了两次或 doInBackGround
猜你喜欢
  • 2015-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多