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工作很痛苦,上面的链接来自生产工作代码。