2012-12-25 23 views
0
private void startUpdateTimerTask() { 
     TimerTask task = new TimerTask() { 
      @Override 
      public void run() { 
       doUpdate(); 

      } 
     }; 

     Timer timer = new Timer(true); 
     timer.schedule(task, ONE_MINUTE_MILLIS, ONE_HOUR_MILLIS); 
    } 

     private void doUpdate() { 
       new AsyncTask<Void,Void,Void>() { 

      @Override 
      protected Void doInBackground(Void... params) { 

       //....Network time-consuming tasks 
       return null; 
      } 

     }.equals(); 

     } 

(1)我的問題:當我運行此功能時,會出現RuntimeException的(無活套; Looper.prepare()不叫這個線程上);機器人的思考:在的AsyncTask TimerTask的

因此,我改變:

private void startUpdateTimerTask() { 
     TimerTask task = new TimerTask() { 
      @Override 
      public void run() { 
         Looper.prepare(); 

       doUpdate(); 

         Looper.loop() 

      } 
     }; 

     Timer timer = new Timer(true); 
     timer.schedule(task, ONE_MINUTE_MILLIS, ONE_HOUR_MILLIS); 
    } 

然後RuntimeException的沒有出現,但doUpdate()只執行一次?

(2)問題:如何實現訪問網絡每1小時更新信息?

+1

**「問:如何實現對網絡的訪問,更新信息,每隔1小時」 ** - 看看使用使用'AlarmManager'重複報警觸發的'IntentService'。 – Squonk

+0

你必須使用'runOnUiThread'。 http://stackoverflow.com/questions/10135353/when-may-we-need-to-use-runonuithread-in-android-applciation – mjosh

回答

0

然後RuntimeException不會出現,但doUpdate()只執行 一次?

這是因爲的AsyncTask只能執行once.The doInBackground()運行在一個單獨的線程,一旦線程完成它的過程中,你不能再次啓動它。由於您已經在使用計時器任務,因此計時器任務將在單獨的工作線程上執行操作,因此您可以在AsyncTask的doInBackground()中執行的計時器任務的run()中執行相同的操作。爲了更新你的UI,你可以使用Runnable。