2014-01-16 48 views
0

我一直工作在Android上循環的AsyncTask執行。我使用的用戶一個提出一個想法,我想出了這個:的TimerTask上不平等的時間間隔

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); 
    } 

我呼籲我的onCreate loopAsyncTaskGetter()()的方法活動和我希望有30秒一次完成的事情,並再次。對我來說奇怪的是,有時候它會在30秒內運行一次,有時它會完成f.e. 5秒內3次,更常見。有人能告訴我爲什麼這樣工作嗎?我在哪裏犯了一個錯誤?

親切的問候!

回答

0

你,當你用它做不取消計時器。正因爲如此,你可能有多個定時器在後臺運行。將你的Timer作爲參數傳遞給你的asynctask並在onPostExecute中取消它。

+0

好,但如果我取消計時器,它不是在循環要去工作。我只是做了它,因爲好奇,它得到了只執行一次,如我所料:(但是,感謝的答覆! – user2987001

+0

多少次你叫loopAsyncTaskGetter()方法?如果你調用它只有一次,那麼,問題是你的異步任務有時需要更長的時間,所以有時你犯了一個新的AsyncTask調用前一個之前結束。正因爲如此,你會看到在很短的時間內多次更新。 – ayorhan

+0

是啊,我把它只有一次,@ onCreate()方法。一執行持續像第二類的東西,所以我覺得 – user2987001