我正在尝试按顺序执行相同的 Asynctask。例如,假设有一个 Asynctask A。现在假设 A 检查某个服务器是否繁忙。如果它很忙,它会再次检查……等等。假设它检查了 5 次,然后让用户知道该服务不可用。
所以显然可以使用相同的 Asynctask。
尝试用循环实现它可能会产生意想不到的结果
link ,
Asynctask 是一个即发即弃的实例,AsyncTask 实例只能使用一次。。
所以循环5次意味着Asynctask会被调用5次。但是如果服务器在第二次尝试时是免费的,我不需要额外的检查。 android 应用程序也可能会挂起(我的也是)。如果我在这个话题上错了,请纠正我。
答案也是,“像 new MyAsyncTask().execute(""); 这样调用任务
”
所以如果我喜欢这样——例如,
new someAsyncTask() {
@Override
protected void onPostExecute(String msg) {
new someAsyncTask() {
@Override
protected void onPostExecute(String msg) {
....and so on 5 times.
}
}.execute(this);
}
}.execute(this);
应该顺序调用5次应该没有问题。
这是执行此操作的唯一方法还是存在任何其他解决方案?
最佳答案
您可以在外部类中使用字段变量:
private int count;
private void attemptConnect(){
count = 0;
new MyTask().execute("");
}
class MyTask extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
return null;
}
@Override
protected void onPostExecute(String s) {
count++;
if(count < 5){
new MyTask().execute("");
}
}
}
或者将计数传递给 AsyncTask 构造函数:
private void attemptConnect(){
new MyTask(0).execute("");
}
class MyTask extends AsyncTask<String, String, String> {
private int count;
public MyTask(int count){
this.count = count;
}
@Override
protected String doInBackground(String... params) {
return null;
}
@Override
protected void onPostExecute(String s) {
if(count < 4){
new MyTask(++count).execute("");
}
}
}
关于android - 按顺序多次运行相同的 Asynctask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30004793/