Android 在不相等的时间间隔上执行TimerTask

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

我一直在Android上做异步循环任务。我使用了一位用户提出的想法,我提出了以下建议:

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。我仍然停留在这一点上。我希望它能像我想的那样工作