gpt4 book ai didi

java - 如何重新启动 AsyncTask 或避免 RUNNING

转载 作者:搜寻专家 更新时间:2023-11-01 08:16:42 25 4
gpt4 key购买 nike

我正在开发一个从 HTML 解析数据的应用程序。解析的数据之一是一个整数,它会随着时间的推移而增加,而不是不断地请求数据,我希望有一个间隔整数的任务。由于我需要将值更新到 TextView 中,所以我决定使用 AsyncTask 而不是 Timer。

我的问题是,一旦我知道它已经完成,或者如果它当前正在运行,我希望能够重新启动我的任务,只需避免对其进行操作。

这是我的异步任务:

class TurnsUpdate extends AsyncTask<Void, Integer, Exception>
{
protected void onPreExecute()
{
turns = Integer.parseInt(DATABASE.getValue("turns").replaceAll(" T", ""));
}

protected Exception doInBackground(Void...voids)
{
while (turns < maxTurns)
{
try
{
Thread.sleep(sleep);
}
catch (InterruptedException e)
{
return e;
}

turns++;
publishProgress(turns);
}
return null;
}

protected void onProgressUpdate(Integer... turns)
{
infoTurns.setText(Integer.toString(turns[0]) + " T");
}

protected void onPostExecute(Exception e)
{
vibrator.vibrate(500);
}
}

我试图开始或避免:

  if ((HOME.updateTurns == null || HOME.updateTurns.getStatus() == AsyncTask.Status.FINISHED) && HOME.updateTurns.getStatus() != AsyncTask.Status.RUNNING)
{
HOME.updateTurns = (UpdateTurns) new UpdateTurns();
HOME.updateTurns.execute();
}

我的做法是否正确?

最佳答案

您是否尝试过只进行递归调用:

new UpdateTurns().execute() 

在 onPostExecute 中?从技术上讲,它应该可以工作,因为 onPostExecute 中的任何代码都在 UI 线程上运行,而不是在 AsyncTask 中创建的线程上运行。

关于java - 如何重新启动 AsyncTask 或避免 RUNNING,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3785505/

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