3

我想创建一个类的实例(它 extends )并在每 5 分钟后Asynctask调用它的方法。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 被阻止的原因。但是,如何在AsyncTask不阻塞 UI 的情况下创建一个新实例?

有什么建议么 ?谢谢。

4

3 回答 3

10

在 onPostExecute 中使用此代码。

new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            new MyAsyncTask().execute("my String");
        }
    }, 5*60*1000);
于 2013-04-27T13:36:16.110 回答
2

使用此代码

Timer timer = new Timer();
timer.schedule( new TimerTask() {
public void run() {
       new MyAsyncTask().execute("my String");
 }
}, 0, 5*60*1000);
于 2013-04-27T13:37:17.340 回答
1

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

查看警报管理器的示例,您想作为后台运行/没有 UI。

于 2013-04-27T17:30:17.033 回答