android - 停止 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。
请问有什么帮助吗?
解决方案
微不足道的只是在调用代码中设置 isLoading xhecking 值。
if (!isloading) {
isLoading = true
new GetFlickr(MainActivity.this, imageViewWeakReference, MainActivity.this)
.execute(Double.toString(Lat), Double.toString(Long));
}
只要只有一个线程可以调用启动异步线程的 coad,它就可以工作。如果多个线程可以,那么您需要像同步块一样移动到锁。
推荐阅读
- java - 当 Spark 作业托管在 Jboss 上并尝试连接到 master 时,调用 RpcHandler #receive() 获取单向消息时出错
- python - 比较字典值并整理出一些
- python - 在 MacOS for Python3.7 中安装 psycopg2 时出现问题
- c++ - QStackedLayout setAlignment 函数什么都不做
- java - 我如何模拟 Ignition.start()
- c# - C# - Xamarin - SQLite -CreatingTable
- jquery - 使用 jquery 选择单选按钮时将类添加到不同的表
- node.js - node.js 需要未定义的结果
- java - 在 Java 中读取 24 位单声道 PCM
- vb.net - 如何比较数字并添加或删除一些数字?