我想创建一个类的实例(扩展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
的新实例?
有什么建议吗? 感谢。
答案 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,您希望作为背景/没有用户界面运行。