gpt4 book ai didi

android - 在 Android 中每 10 秒使用 AsyncTask 调用 REST 方法

转载 作者:太空狗 更新时间:2023-10-29 16:17:14 27 4
gpt4 key购买 nike

我需要每 10 秒调用一次服务器的 REST 方法,

我的 Intent 是使用 AsyncTask 按以下方式执行此操作:

myTask = new AsyncTask<Void, Void, String>() {

@Override
protected void onPreExecute() {
super.onPreExecute();
...
}

@Override
protected String doInBackground(Void... params) {
//invoke REST service
....
return "";
}

@Override
protected void onPostExecute(String response) {
super.onPostExecute(response);
//post execute operations
...
}
};

谁能帮帮我?

最佳答案

解决方案是从 TimerTask 调用 AsyncTask

protected class MyTimerTask extends TimerTask {

@Override
public void run() {

(new AsyncTask<Void, Void, String>() {

@Override
protected void onPreExecute() {
super.onPreExecute();
...
}

@Override
protected String doInBackground(Void... params) {
//invoke REST service
....
return "";
}

@Override
protected void onPostExecute(String response) {
super.onPostExecute(response);
//post execute operations
...
}
}).execute();
}
}

如果担心对服务器的调用时间太长,然后要求它们重叠,可以通过以下方式输入带有AtomicBoolean(同步)的信号量:

信号量声明

private final AtomicBoolean isRunning = new AtomicBoolean(false);

带有信号量的 TimerTask

protected class MyTimerTask extends TimerTask {

@Override
public void run() {

//if isRunning is true does not execute the task
if (isRunning.get()) return;

(new AsyncTask<Void, Void, String>() {

@Override
protected void onPreExecute() {
super.onPreExecute();

//active flag isRunning
isRunning.set(true);

...
}

@Override
protected String doInBackground(Void... params) {

....
//invoke REST service
....
return "";
}

@Override
protected void onPostExecute(String response) {
super.onPostExecute(response);
//post execute operations
...

//deactive flag isRunning
isRunning.set(false);
}
}).execute();
}
}

注意:当你捕获到错误时要小心关闭信号量,因为如果由于某种原因保持 Activity 状态将不再运行 AsyncTask

关于android - 在 Android 中每 10 秒使用 AsyncTask 调用 REST 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24048349/

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