Android 间隔5分钟后递归启动异步任务

Android 间隔5分钟后递归启动异步任务,android,android-asynctask,Android,Android Asynctask,我想创建一个类的实例(它扩展了Asynctask),并每隔5分钟调用它的execute()方法。为此,我尝试调用onPostExecute()方法中的Thread.sleep(5*60*1000)),然后创建该类的新实例。代码如下 public class MyAsyncTask extends AsyncTask<String, Void, String> { protected String doInBackground(String... arg0) {

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

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");
    }
}
公共类MyAsyncTask扩展了AsyncTask
{
受保护的字符串doInBackground(字符串…arg0){
//不管我想做什么
}
受保护的void onPostExecute(字符串结果){
线程睡眠(5*60*1000);
新建MyAsyncTask().execute(“我的字符串”);
}
}
但使用此代码会将UI阻塞5分钟。我在某处读到,
onPostExecute()
中的代码是在UI线程中执行的。这解释了UI被阻止的原因。 但是,如何在不阻塞UI的情况下创建
AsyncTask
的新实例呢

有什么建议吗?
谢谢。

在onPostExecute中使用此代码

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

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

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


请检查,您希望作为后台运行/不使用UI。

注意,让AlarmManager工作很痛苦,上面的链接来自生产工作代码。