2011-08-11 59 views
0

我正在開發一個應用程序,應該在後臺定期執行一些任務(10秒)。爲此,我使用Service和Timer。在計時器中要完成的實際工作是:
1)從手機(使用ContentResolver)將數據收集到SQLite數據庫中,
2)使用HttpPost方法同步發送此數據到遠程服務器。Android定時器和更改期間

接下來的問題是:經過一些迭代(這些迭代的次數會更改應用程序的每次執行)計時器會更改其週期並開始執行1-3秒的所有任務(有時最多9次,但總是更低比10秒)延遲,這在我的情況下速度太快,我找不到原因。 有沒有人曾經面對類似的行爲?

我試過使用不同的線程上傳和收集計時器任務內,但它沒有解決問題。

這裏是我的代碼片段:

public class DataForward extends Service{ 
private Context con = getBaseContext(); 
private Timer timer = new Timer(); 
<...> 
@Override 
public void onStart(Intent intent, int startId) { 
     timer.schedule(new TimerTask(){ 
     @Override 
     public void run() { 
      try { 
       updateData(); 
      NetworkManager network = new NetworkManager(con); 
        if(network.isConnectedToTheInternet())   
       uploadData(); 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 


     }}, 0, 10000); 
} 
} 
<...> 
} 

或者,也許有另一種方式來做到這一點沒有實際的計時器? 任何想法?

回答

0

的原因可能是,因爲你告訴它的運行上的服務,它很可能是因爲您在Android操作系統發現它要低上RAM序,以保持其

backgroundTask(服務)可以被殺死

foreGround應用程序運行..並再次獲得免費Ram再次重新啓動服務,所以

它可能會重新啓動計時器一次又一次。

更多的瞭解這個.. SERVICE

0

你的時間第一次執行0米利斯和隨後的執行是經過10個millis.But Android操作系統可能會停止服務以供內部工作management.So,再次當你的服務啓動在一段時間後,它會重新設置計時器。所以,它會立即執行你的任務,這就是你的問題的原因。 因此,您可以設置首次執行的時間最短時間或可以使用重複鬧鐘。