我正在开发一个应用程序,用于解析HTML中的数据。其中一个被解析的数据是一个随时间增加的整数,而不是不断请求数据,我希望有一个间隔整数的任务。由于我需要将值更新到TextView中,我决定使用AsyncTask而不是定时器。如何重新启动AsyncTask或避免运行
我的问题是我希望能够重新启动我的任务,一旦我知道它已经完成,或者如果它目前正在运行,只是避免操纵它。
这里是我的AsyncTask:
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();
}
我要对这个正确?
我使用TurnsUpdate创建了自己的公共类,并使infoTurns成为受保护的参考,从而解决了这个问题。据我所知,这一切都可以工作。 – 2010-09-24 20:06:42
我说得太快了。我在完成完成后重新启动AsyncTask仍然有问题,或者在运行时避免它。 – 2010-09-24 20:33:09