2010-08-31 61 views
5

我正在使用其餘呼叫從服務器獲取數據並將其添加到視圖中的應用程序。我正確地獲取了所有的初始數據。我使用AsyncTask來完成它。定期從Android中的服務器獲取數據(輪詢)

現在我想定期(比如2分鐘)從服務器獲取新數據並將其添加到視圖中。定期從Android中的服務器獲取數據(輪詢)。

+1

退房http://developer.android.com/reference/java/util/TimerTask.html – 2010-08-31 08:56:57

回答

1

最好的辦法是創建一個從服務器獲取數據的服務。 之後,如果您的活動正在運行,則服務可以使用提取的數據向活動發送意向。

或者,在您的應用運行時讓服務運行,並在啓動時將您的活動綁定到服務。然後使用AIDL或類似的東西與服務進行通信。
(例如,每個服務都有獲取的數據時,它可以激發關閉您的活動的回調函數)

3

可以檢出AlarmManager類來做到這一點。

Intent intent = new Intent(this, MyAlarmManager.class); 

long scTime = 60*2000;//2mins 

PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); 

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 

alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + scTime, pendingIntent); 

這裏的報警Manager--

public class MyAlarmManager extends BroadcastReceiver { 

    Context _context; 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      _context= context; 
      //connect to server.. 

     } 
} 

當有史以來AlarmManager被「開除」重新連接到服務器,並填充你剛剛收到的數據。

http://developer.android.com/reference/android/app/AlarmManager.html

+0

嗨Umesh製作, 試過您的解決方案。我使用AlarmManager作爲內部類,然後進行異步調用來更新我的GUI。但我得到這個錯誤: 「無法實例化接收器」。 我已將此添加到AndroidManifest.xml文件中: 問題是什麼? – 2010-08-31 12:10:47

+0

正如你所看到的,AlarmManager是一個公共類,它擴展了BroadcastReciever並且需要寫入不同的文件。 (在上述情況下的文件的名稱將是MyAlarmManager.java) 在清單文件: <接收機機器人:「 MyAlarmManager」名稱=機器人:啓用=‘真’> \t <意圖濾波器> \t \t \t \t 保持它作爲內部類可能是這裏的問題。 – Umesh 2010-09-01 05:25:08

1

按照教程中提到here。這正是你想要做的。此外,由於每隔幾分鐘就會進行一次服務器調用,因此會消耗電池。所以,你可以嘗試將服務器調用,只有當通過推送通知的服務器數據的變化..