在实现轮询框架时会主要会要到下面两个类,会结合轮询框架对这三个类进行讲解,在应用中分析会理解更加深刻。
1、IntentService IntentService是一种特殊的Service,继承了Service并且是一个抽象类,必须创建它的子类才能用。IntentService可以用于执行后台耗时的任务,当任务执行后会自动停止,IntentService的优先级比一般的线程高,比较适合执行一些优先级高的后台任务。
2、PendingIntent PendingIntent是延迟的intent,主要用来在某个事件完成后执行特定的Action。PendingIntent包含了Intent及Context,所以就算Intent所属程序结束,PendingIntent依然有效,可以在其他程序中使用。PendingIntent一般作为参数传给某个实例,在该实例完成某个操作后自动执行PendingIntent上的Action,也可以通过PendingIntent的send函数手动执行,并可以在send函数中设置OnFinished表示send成功后执行的动作。
轮询框架实现
要实现轮询,可以借鉴Handler中的looper机制,如下图,维护一个消息队列,循环的从消息队列中取出消息来执行,轮询框架可以定时的向消息队列中加入消息,然后循环中消息队列中取出消息执行。
可以自己实现一个Looper,但是IntentService中已经包含了一个Looper和一个HandlerThread。因此轮询框架中使用IntentService作为循环框架。继承IntentService接口来实现处理消息访问服务器。
PollingService 用于每次轮询时向请求服务器接口数据。
public class PollingService extends IntentService {
public static final String ACTION_CHECK_CIRCLE_UPDATE=“ACTION_CHECK_CIRCLE_UPDATE”;
public static final long DEFAULT_MIN_POLLING_INTERVAL = 60000;//最短轮询间隔1分钟
public PollingService() {
super(“PollingService”);
}
@Override
protected void onHandleIntent(Intent intent) {
if (intent == null)
return;
final String action = intent.getAction();
if (ACTION_CHECK_Circle_UPDATE.equals(action)) {
CheckCircleOfFriendsUpdate();//这个是访问服务器获取朋友圈是否更新
}
}
}</