2011-11-03 38 views
0

在我的應用程序中,每隔30秒我必須從網絡重新加載內容。問題是這個功能在一段時間內工作正常,但之後(或者當設備處於待機狀態時)內容在5秒7秒後在不同的時刻重新加載,我不明白爲什麼發生。每隔X秒從網絡獲取數據

這裏是我的代碼:

onCreate()方法:

 handler1 = new Handler(); 
     t1 = new Timer(); 
     doReload1(); 

其中doReload1()是:

public void doReload1() { 

     scanTask1 = new TimerTask() { 
      public void run() { 
       handler1.post(new Runnable() { 
        public void run() { 
         System.out.println("Every 30 sec getPlaylist");      


        } 
       }); 
      } 
     }; 

     t1.schedule(scanTask1, 300, 30000); 
     try { 
      GetPlaylists(); //method for get data from web 
     } catch (Exception e) { 
      System.out.println("You are in catch"); 
     } 
    } 

回答

1

任務的活動,而手機處於待機模式下,它不會起作用。即使手機處於待機狀態,也希望檢索數據,請使用服務。

+0

服務也同時設備處於休眠模式時不運行。你需要購買WakeLock:http://developer.android.com/reference/android/os/PowerManager.html –

3

要做的最好的事情是使用AlarmManager,因爲它將代表您處理所有需要的東西,以便在手機睡着時運行任務。在Google提供的ApiDemos中有一個使用這種技術的演示。

簡而言之,您可以讓IntentService從AlarmManager捕獲PendingIntent,然後下載Web數據。然後,您的活動可以抓住這個數據,每當它想要刷新其數據。或者,由於新數據可用,您的服務可能會向活動發送信號以實際更新自身。

編輯

Direct link to google example of using Alarms

+0

你能否給我一個簡單的例子?我發現這個http://android-in-practice.googlecode.com/svn/trunk/ch02/DealDroidWithService/ – Gabrielle

+0

我添加了一個到Google API演示的直接鏈接。他們展示瞭如何啓動服務等。在AlarmService_Service內部,它們產生了一個什麼都不做的線程。你可以做同樣的事情,但實際上在那個任務中執行你的下載。然後可能發送一個廣播意圖到您的活動,告訴它更新自己。我會建議使用IntentService而不是像google的例子那樣的常規服務,這樣你就不必親自產生線程了。 –