举个例子,腾讯自选股的这个列表里的数据,可以每隔几秒就刷新一次。
我目前的考虑是作为一个定时任务,任务内容就是发起网络请求去服务器拿新的数据。我自己这边的思路有以下三个:
新建
Timer
和TimerTask
,然后用timer.schedule(timerTask, 0, 5000);
启动。不过,我不太清楚Timer用于Android里是否会有一些弊端。新建一个Service,然后在Service内使用
AlarmManager
发起定时广播,并在对应的BroadcastReceiver里再次启动Service。 通过这样的循环来实现定时任务,新建一个Service,通过这个Service和服务器建立持久化的连接,然后由服务器来推送消息。不过,我对Android里这个做法还不太了解,这里持久连接是WebSocket吗?大概怎样的实现过程?
请问哪一种思路会更合适?
这种需求当然是TimeTask要好一点,用socket有点浪费资源了,毕竟你是定时的,不像推送那样我们不知道他什么时候更新。 要注意的一点是,当程序在后台工作时记得把TimeTask暂停。不然一直跑流量,用户体验不行
需要用AlarmService
用普通Timer 会在待机的时候中断。
并且类型需要设置为AlarmManager.ELAPSED_REALTIME_WAKEUP
调用
Intent intent = new Intent(this, MyBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(),
0, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
System.currentTimeMillis(), 10*1000, pendingIntent);
另起一个类
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//活儿
}
}
也可以用handler
的postDelay
,在handler
的handleMessage里面继续postDelay
,在Service
或者Activity
退出的时候,记得removeCallback
就行了