gpt4 book ai didi

android - 按顺序多次运行相同的 Asynctask

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:04:13 25 4
gpt4 key购买 nike

我正在尝试按顺序执行相同的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com