Android 在不相等的时间间隔上执行TimerTask
我一直在Android上做异步循环任务。我使用了一位用户提出的想法,我提出了以下建议:Android 在不相等的时间间隔上执行TimerTask,android,android-asynctask,oncreate,timertask,Android,Android Asynctask,Oncreate,Timertask,我一直在Android上做异步循环任务。我使用了一位用户提出的想法,我提出了以下建议: public void loopAsyncTaskGetter(){ final Handler handler = new Handler(); final Timer timer = new Timer(); TimerTask doAsynchronousTask = new TimerTask() { @Override publ
public void loopAsyncTaskGetter(){
final Handler handler = new Handler();
final Timer timer = new Timer();
TimerTask doAsynchronousTask = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
public void run() {
try {
new GetTasksAsync().execute(getIntent().getStringExtra(MainActivity.EXTRA_ID));
} catch (Exception e) {
}
}
});
}
};
timer.schedule(doAsynchronousTask, 500, 1000*30);
}
我的AsyncTask扩展类如下所示:
class GetTasksAsync extends AsyncTask<String, Void, Void>{
ProgressDialog dialog;
@Override
protected void onPreExecute(){
//dialog stuff
super.onPreExecute();
}
@Override
protected Void doInBackground(String... data) {
//this method below returns JSON String from my PHP file
String jsonData = Webserv.getTaskJson(data[0]);
try {
JSONArray jsonArray = new JSONArray(jsonData);
for(int i=0; i<jsonArray.length(); i++){
//some json parsing, doesn't matter
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void v){
dialog.dismiss();
myAdapter.notifyDataSetChanged();
super.onPostExecute(v);
}
类GetTaskAsync扩展了AsyncTask{
进程对话;
@凌驾
受保护的void onPreExecute(){
//对话材料
super.onPreExecute();
}
@凌驾
受保护的Void doInBackground(字符串…数据){
//下面的方法从我的PHP文件返回JSON字符串
字符串jsonData=Webserv.getTaskJson(数据[0]);
试一试{
JSONArray JSONArray=新的JSONArray(jsonData);
对于(int i=0;i完成计时器后,您不会取消计时器。因此,您可能有多个计时器在后台运行。将计时器作为参数传递给asynctask,并在onPostExecute中取消它。好吧,但是如果我取消计时器,它将不会在循环中工作。出于好奇,我只是这样做了,它只在上执行ce,正如我所预料的:(但感谢您的回复!您给loopAsyncTaskGetter()打了多少次电话)方法?如果只调用一次,那么问题是异步任务有时需要更长的时间,因此有时在前一个异步任务结束之前进行新的异步任务调用。因此,您会在短时间内看到多个更新。是的,我只调用了一次,@onCreate()方法。一次执行像一秒钟或其他时间一样持续,所以我认为这是不可能的。您可以共享您的onCreate方法,以及调用loopAsyncTaskGetter的部分吗?顺便说一下,在注意到位置的更改后,我正在执行另一个AsyncTask。这可能会导致问题吗?我在某个地方读到,有许多AsyncTask可以并行执行我的安卓版本是2.3.4。我仍然停留在这一点上。我希望它能像我想的那样工作