2010-08-31 102 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。这正是你想要做的。此外,由于每隔几分钟就会进行一次服务器调用,因此会消耗电池。所以,你可以尝试将服务器调用,只有当通过推送通知的服务器数据的变化..