我一直在努力在Android上循环AsyncTask。我使用了一个用户建议的想法,我提出了这个想法:
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);
}
我在Activity的onCreate()方法上调用了loopAsyncTaskGetter(),我希望在30秒内再完成一次。对我来说奇怪的是,它有时会工作一次30秒,有时它会完成f.e. 5秒内3次,更经常。谁能告诉我它为什么会这样?我在哪里弄错了?
亲切的问候!
答案 0 :(得分:0)
完成后,您不会取消计时器。因此,您可能在后台运行多个计时器。将您的Timer作为参数传递给您的asynctask并在onPostExecute中取消它。