在5分钟的间隙后递归地启动AsyncTask

时间:2013-04-27 13:30:55

标签: android android-asynctask

我想创建一个类的实例(扩展Asynctask)并在每5分钟后调用其execute()方法。为此,我尝试在Thread.sleep(5*60*1000))方法中调用onPostExecute(),然后创建该类的新实例。代码如下。

public class MyAsyncTask extends AsyncTask<String, Void, String>
{
    protected String doInBackground(String... arg0) {
        //whatever I want to do
    }

    protected void onPostExecute(String result) {
        Thread.sleep(5*60*1000);
        new MyAsyncTask().execute("my String");
    }
}

但是使用此代码会阻止UI 5分钟。我在某处读到onPostExecute()中的代码在UI线程中执行。这解释了UI被阻止的原因。 但是,如何在不阻止UI的情况下创建AsyncTask的新实例?

有什么建议吗? 感谢。

3 个答案:

答案 0 :(得分:10)

在onPostExecute中使用此代码。

new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            new MyAsyncTask().execute("my String");
        }
    }, 5*60*1000);

答案 1 :(得分:2)

使用此代码

Timer timer = new Timer();
timer.schedule( new TimerTask() {
public void run() {
       new MyAsyncTask().execute("my String");
 }
}, 0, 5*60*1000);

答案 2 :(得分:1)

有许多方法可以重复任务,但经过大量实验后,我发现在没有实际运行活动的情况下运行常规任务应该通过AlarmManager。所有其他技术都适用于需要运行UI的应用程序。 Handler运作良好@ Sagar的反应很好。

结帐example of alarm manager,您希望作为背景/没有用户界面运行。