亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 系統(tǒng) > Android > 正文

andriod如何搭建自己的輪詢框架

2019-10-21 21:30:58
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

很多時(shí)候Android應(yīng)用需要每間隔一段時(shí)間向服務(wù)器請(qǐng)求數(shù)據(jù),如果服務(wù)器數(shù)據(jù)有更新則通知界面變化。Android中最常用的紅點(diǎn)一般采用的就是輪詢,紅點(diǎn)是為了在數(shù)據(jù)有更新時(shí)及時(shí)的提醒用戶,比如朋友圈更新,當(dāng)用戶的朋友圈更新時(shí)就會(huì)顯示紅點(diǎn),就是通過(guò)移動(dòng)端不斷的向服務(wù)器查詢朋友圈的更新?tīng)顟B(tài)。

相關(guān)知識(shí)點(diǎn)

在實(shí)現(xiàn)輪詢框架時(shí)會(huì)主要會(huì)要到下面兩個(gè)類,會(huì)結(jié)合輪詢框架對(duì)這三個(gè)類進(jìn)行講解,在應(yīng)用中分析會(huì)理解更加深刻。

1、IntentService IntentService是一種特殊的Service,繼承了Service并且是一個(gè)抽象類,必須創(chuàng)建它的子類才能用。IntentService可以用于執(zhí)行后臺(tái)耗時(shí)的任務(wù),當(dāng)任務(wù)執(zhí)行后會(huì)自動(dòng)停止,IntentService的優(yōu)先級(jí)比一般的線程高,比較適合執(zhí)行一些優(yōu)先級(jí)高的后臺(tái)任務(wù)。

2、PendingIntent PendingIntent是延遲的intent,主要用來(lái)在某個(gè)事件完成后執(zhí)行特定的Action。PendingIntent包含了Intent及Context,所以就算Intent所屬程序結(jié)束,PendingIntent依然有效,可以在其他程序中使用。PendingIntent一般作為參數(shù)傳給某個(gè)實(shí)例,在該實(shí)例完成某個(gè)操作后自動(dòng)執(zhí)行PendingIntent上的Action,也可以通過(guò)PendingIntent的send函數(shù)手動(dòng)執(zhí)行,并可以在send函數(shù)中設(shè)置OnFinished表示send成功后執(zhí)行的動(dòng)作。

輪詢框架實(shí)現(xiàn)

要實(shí)現(xiàn)輪詢,可以借鑒Handler中的looper機(jī)制,如下圖,維護(hù)一個(gè)消息隊(duì)列,循環(huán)的從消息隊(duì)列中取出消息來(lái)執(zhí)行,輪詢框架可以定時(shí)的向消息隊(duì)列中加入消息,然后循環(huán)中消息隊(duì)列中取出消息執(zhí)行。

 

 
andriod,輪詢框架

 

可以自己實(shí)現(xiàn)一個(gè)Looper,但是IntentService中已經(jīng)包含了一個(gè)Looper和一個(gè)HandlerThread。因此輪詢框架中使用IntentService作為循環(huán)框架。繼承IntentService接口來(lái)實(shí)現(xiàn)處理消息訪問(wèn)服務(wù)器。

PollingService 用于每次輪詢時(shí)向請(qǐng)求服務(wù)器接口數(shù)據(jù)。

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();//這個(gè)是訪問(wèn)服務(wù)器獲取朋友圈是否更新  } }}

PollingService 用來(lái)處理接到輪詢的消息之后在 onHandleIntent(Intent intent) 中根據(jù)Intent所帶有的action不同來(lái)進(jìn)行訪問(wèn)服務(wù)器不同的接口獲取數(shù)據(jù)。

PollingUtil 用于控制輪詢服務(wù)的開始和結(jié)束 使用PollingUtil中的startPollingService來(lái)根據(jù)action和context生成一個(gè)PendingIntent,并將PendingIntent交給PollingScheduler來(lái)處理。PollingScheduler是一個(gè)線程池控制類。

public class PollingUtil { /**  * 開始輪詢服務(wù)  */ public static void startPollingService(final Context context, String action) {   //包裝需要執(zhí)行Service的Intent   Intent intent = new Intent(context, PollingService.class);   intent.setAction(action);   PendingIntent pendingIntent = PendingIntent.getService(context, 0,     intent, PendingIntent.FLAG_UPDATE_CURRENT);   PollingScheduler.getInstance().addScheduleTask(pendingIntent, 0, PollingService.DEFAULT_MIN_POLLING_INTERVAL);  } } /**  * 停止輪詢服務(wù)  *  * @param context  */ public static void stopPollingServices(Context context, String action) {   PollingScheduler.getInstance().clearScheduleTasks();  } }

PollingScheduler實(shí)現(xiàn)定時(shí)向IntentService的Looper中加入消息 PollingScheduler中生成一個(gè)單線程池,addScheduleTask中定時(shí)的執(zhí)行pendingIntent.send(),其中PendingIntent是由 PendingIntent pendingIntent = PendingIntent.getService(context, 0,intent, PendingIntent.FLAG_UPDATE_CURRENT); 生成的,pendingIntent.send()函數(shù)會(huì)調(diào)用Service.startService()來(lái)開啟一個(gè)服務(wù)。

public class PollingScheduler { private static PollingScheduler sInstance; private ScheduledExecutorService mScheduler; private PollingScheduler() {  mScheduler = Executors.newSingleThreadScheduledExecutor(); } public static synchronized PollingScheduler getInstance() {  if (sInstance == null) {   sInstance = new PollingScheduler();  }  if (sInstance.mScheduler.isShutdown()) {   sInstance.mScheduler = Executors.newSingleThreadScheduledExecutor();  }  return sInstance; }	 public void addScheduleTask(final PendingIntent pendingIntent, long initialDelay, long period) {  Runnable command = new Runnable() {   @Override   public void run() {    try {     pendingIntent.send();    } catch (PendingIntent.CanceledException e) {     e.printStackTrace();    }   }  };  mScheduler.scheduleAtFixedRate(command, initialDelay, period, TimeUnit.MILLISECONDS); } public void clearScheduleTasks() {  mScheduler.shutdownNow(); }}

代碼分析

先給出類圖之間的關(guān)系如下:

andriod,輪詢框架

PollingService繼承了IntentService,并且在PollingUtil的startPollingService方法中通過(guò) Intent intent = new Intent(context, PollingService.class); 和將PendingIntent 與PollingService關(guān)聯(lián)起來(lái),并將PendingIntent加入到定時(shí)執(zhí)行的線程池中,在PollingScheduler 中使用 pendingIntent.send();

由于PendingIntent與PollingService關(guān)聯(lián),所以執(zhí)行pendingIntent.send()的時(shí)候會(huì)調(diào)用PollingIntentServide中的onStart()方法。onStart()方法是IntentService中的方法,代碼如下:

 @Override public void onStart(@Nullable Intent intent, int startId) {  Message msg = mServiceHandler.obtainMessage();  msg.arg1 = startId;  msg.obj = intent;  mServiceHandler.sendMessage(msg); }

在onstart()中有一個(gè) mServiceHandler.sendMessage(msg); ,找到mServiceHandler的生成位置:

 @Override public void onCreate() {  super.onCreate();  HandlerThread thread = new HandlerThread("IntentService[" + mName + "]");  thread.start();  mServiceLooper = thread.getLooper();  mServiceHandler = new ServiceHandler(mServiceLooper); }

在IntentService的onCreate方法中生成了一個(gè)HandlerThread,一個(gè)mServiceLooper,一個(gè)mServiceHandler,其中mServiceHandler.sendMessage(msg)中的msg都會(huì)放到mServiceLooper,執(zhí)行時(shí)從mServiceLooper中取出執(zhí)行,其中ServiceHandler 的代碼如下

 private final class ServiceHandler extends Handler {  public ServiceHandler(Looper looper) {   super(looper);  }  @Override  public void handleMessage(Message msg) {   onHandleIntent((Intent)msg.obj);   stopSelf(msg.arg1);  } }

handleMessage(Message msg)中會(huì)調(diào)用onHandleIntent((Intent)msg.obj);方法,也就是在PollingService中重寫的onHandleIntent方法。 因此我們?cè)赼ddScheduleTask中不斷的執(zhí)行pending.send()方法,會(huì)不斷的調(diào)用IntentService中的onStart方法中的mServiceHandler.sendMessage(msg);不斷的向消息隊(duì)列中發(fā)消息,然后在onHandleIntent處理消息。 這樣一個(gè)輪詢框架就完成了。

總結(jié)

本文的輪詢框架利用了IntentService中的handler和Looper機(jī)制來(lái)實(shí)現(xiàn)循環(huán)的處理消息,由于IntentService具有服務(wù)的特性因此特別適合后臺(tái)輪詢?cè)L問(wèn)服務(wù)器數(shù)據(jù)。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
蜜乳av一区二区三区| 亚洲国产精品电影在线观看| 欧美另类变人与禽xxxxx| 国产福利视频一区二区| 亚洲18私人小影院| 麻豆成人在线播放| 欧美日韩一区在线| 日本一本在线观看| 偷窥自拍亚洲色图| 久久久久久亚洲精品中文字幕| 在线观看国产精品网站| 亚洲一二三区在线观看| 国产精品a成v人在线播放| 亚洲欧美另类图片小说| 懂色av一区二区三区四区| 黄动漫网站在线观看| 精国产品一区二区三区a片| 推川ゆうり中文亚洲二区| 天天射夜夜骑| 777影院狠狠色| 欧美高清视频一二三区| 国产日韩欧美一区二区三区在线观看| tube国产麻豆| 成人黄色a**站在线观看| 欧美精品色视频| 国产免费成人在线视频| 911亚洲精品| 在线观看中文字幕码| 日本中文字幕中出在线| 992tv免费直播在线观看| 亚洲一区二区三区激情| 波多野结衣一区二区在线| 免费黄色a级片| a看欧美黄色女同性恋| 国产精品资源站在线| 岛国av在线| 欧美一级鲁丝片| 亚洲综合丁香婷婷六月香| 成年网址网站在线观看| 先锋影音男人av资源| 欧美丰满熟妇bbbbbb百度| 亚洲欧美一级二级三级| 91免费视频污| 日韩国产网站| 亚洲地区一二三色| 亚洲人成电影网站色…| 18禁网站免费无遮挡无码中文| 天天操夜夜欢| 国产一区福利视频| 日本欧美一区二区三区乱码| 国产一区二区视频在线| 四虎8848精品成人免费网站| 日本高清不卡的在线| 欧美日韩一区二区三区四区五区六区| 久久香蕉国产线看观看99| 久久se精品一区二区| 91嫩草|国产丨精品入口| 精品国产露脸精彩对白| 日本dhxxxxxdh14日本| 亚洲无av在线中文字幕| 欧美xoxoxo| 日韩国产美国| 国产精品一区在线观看| 一本到12不卡视频在线dvd| 天天色综合久久| 欧洲成人av| 五月久久久综合一区二区小说| 亚洲一级免费视频| 无人日本免费视频| 欧美体内she精视频| 在线亚洲+欧美+日本专区| 久久久久久久免费视频了| 亚洲人吸女人奶水| 91国偷自产一区二区三区观看| 樱桃视频免费看| 亚洲资源在线观看| 国产欧美成人| 亚洲激情播播| 日本免费高清视频| 成人免费观看a| 欧美美女bb生活片| 国产精品夜夜夜爽阿娇| 天天影院图片亚洲| 无码人中文字幕| 懂色av粉嫩av蜜臀av一区二区三区| 国产高潮视频在线观看| 成人在线免费电影网站| 第四色男人最爱上成人网| 日韩图片一区| 亚洲国产日韩a在线播放| 欧美男体视频| 午夜精品视频在线观看| 国产不卡视频一区| 色妞色视频一区二区三区四区| 日韩av网站大全| av免费不卡国产观看| 69久久精品无码一区二区| 色网站在线视频| 作爱视频免费观看视频在线播放激情网| 91精品国产一区二区| 日本一本二本在线观看| 精品一区二区无码| 中文字幕第一区| 欧美做爰爽爽爽爽爽爽| 欧洲精品一区二区三区久久| 欧美一区二区性放荡片| 自拍偷拍亚洲一区| 中文字幕成人乱码在线电影| 在线观看免费网站| 香蒸焦蕉伊在线| 亚洲超碰精品一区二区| 99视频免费在线观看| 亚洲成人中文字幕| 国产精品无码专区av免费播放| 国产伦精品一区二区三区四区视频_| 国产成a人亚洲精v品无码| 91资源在线观看| 97成人精品区在线播放| 亚洲精品在线免费看| 天天操天天干天天| 精品黄色免费中文电影在线播放| 国产一区二区三区成人| 欧美一级一区二区| 在线免费观看黄色片| 欧美人伦禁忌dvd放荡欲情| 伊人久久国产精品| 天天干在线观看| 99综合电影在线视频| 国产理论在线观看| 成人国产一区二区| 日韩三级视频在线播放| 久久九九免费| 精品伦精品一区二区三区视频密桃| 老牛国内精品亚洲成av人片| 毛片基地黄久久久久久天堂| 狠狠色噜噜狠狠狠狠黑人| 国产精品天天看| 久久精品九色| 9人人澡人人爽人人精品| 国产精品久久久久久中文字| 好吊一区二区三区视频| 欧美精品三级在线观看| 综合久久国产九一剧情麻豆| 91丨精品丨国产| 日本精品一级二级| 九一国产精品| 自拍偷拍亚洲色图欧美| 第四色亚洲色图| 国产69精品99久久久久久宅男| 国产亲伦免费视频播放| 亚洲国产精彩中文乱码av在线播放| 久久精品日产第一区二区| 天堂社区 天堂综合网 天堂资源最新版| 美女把腿扒开让男人桶免费| 日韩黄色一级片| 天堂av中文在线资源库| 欧美主播一区二区三区| 亚洲欧美卡通动漫| 日韩欧美色视频| 992tv成人免费影院| 久久综合久久88| 无遮挡aaaaa大片免费看| 日韩欧美黄色大片| 三上悠亚在线一区| 欧美国产精品久久| 天天射,天天干| 欧美福利电影在线观看| 亚洲精品视频在线免费| 欧美在线视频免费| 国产色视频一区二区三区qq号| 久久99国内| 香蕉乱码成人久久天堂爱免费| 亚洲国产天堂久久国产91| 91插插插插插插| 欧美大香线蕉线伊人久久| 久草免费资源站| 国产在视频线精品视频| 午夜精品久久久久久久久久久| 欧美精品vⅰdeose4hd| 欧美日韩成人高清| 久久精品日产第一区二区三区乱码| **欧美日韩在线| 亚洲天堂手机在线| 在免费jizzjizz在线视频| 日韩精品一区二区三区三区免费| 91小视频免费看| 久久久精品久久| 亚洲中文字幕无码不卡电影| 欧美一级久久| 久久夜色精品国产噜噜av小说| 亚洲国产视频a| 久久青草精品视频免费观看| www.国产成人| 欧美洲成人男女午夜视频| 91中文字幕在线视频| 精品国产污污免费网站入口| 日韩理论电影大全| 日韩精品―中文字幕| 蜜桃免费一区二区三区| www.久久草| 欧美在线视频a| 国产精品久久久久久久久搜平片| 久久久女人电视剧免费播放下载| 乱老熟女一区二区三区| 久久精品国产96久久久香蕉| 天堂av资源在线| 欧美成人观看免费全部完小说| av在线首页| 亚洲欧美日本在线观看| 亚洲精品911| 精品99一区二区三区| 国产极品在线播放| 国产精品视频黄色| 亚洲免费成人在线| 波多野结衣的一区二区三区| 国产网站av| 亚洲欧美另类在线| 972aa.com艺术欧美| 国产乱一区二区| 国产免费观看久久| 欧美va在线播放| 亚洲精品国产精品乱码在线观看| 99久久精品免费看国产交换| 天天视频一区二区三区| 国产精品久久久久77777| 国产一区二区日韩精品| 精品视频—区二区三区免费| 国产91久久婷婷一区二区| 色多多视频在线播放| 国产日韩欧美另类| 久久婷婷久久一区二区三区| 成年人免费网站| 激情久久久久| 欧美精品18videosex性欧美| 欧美激情一区二区| 中文字幕人妻互换av久久| 亚洲精品二三区| 四虎国产成人永久精品免费| 亚洲va久久久噜噜噜无码久久| 国产精品一区二区av白丝下载| 波多野结依一区| 亚洲高清不卡在线观看| www.超碰97| 爱爱免费小视频| av在线中文| 香蕉久久精品| 欧美一区二区中文字幕| 7777精品久久久大香线蕉| 国产91九色蝌蚪| 精品亚洲第一| 日本在线观看高清完整版| 成人视屏免费看| 影音av资源网| 精品视频在线一区二区| 精品久久久久久中文字幕| 草草地址线路①屁屁影院成人| 91精品人妻一区二区三区蜜桃2| 97精品国产一区二区三区| 免费在线成人| 成人久久一区二区三区| 国产福利av网站| 99精品久久久久| 亚洲欧美日本一区二区三区| a√免费观看在线网址www| 日本1区2区3区中文字幕| 在线看的黄色网址| 少妇视频在线观看| 久久av国产紧身裤| 国产成人久久久久| 亚洲精品久久久久久久久久久| 黄色一级片在线观看| 中文字幕日本三级| 日韩精品一区二区三区swag| 国产黄a三级三级看三级| jizz蜜桃视频在线观看| 手机在线免费观看毛片| 韩国精品久久久| 日韩专区第三页| 精品伦精品一区二区三区视频| av在线播放一区二区| 人妻 丝袜美腿 中文字幕| 日韩毛片一二三区| 亚洲国产欧美久久| 91视频-88av| 在线看无码的免费网站| 国产91在线高潮白浆在线观看| 3d欧美精品动漫xxxx无尽| 亚洲欧美日韩在线| 亚洲电影在线一区二区三区| 亚洲欧洲日本一区二区三区| www.日本在线观看| 美国十次av导航亚洲入口| 最好看的中文字幕久久| 亚洲欧美日韩动漫| 日本成人在线不卡| 欧美精品久久久久久久久| 欧美日韩在线播| www国产在线| 国产精品日韩精品| 成人精品免费在线观看| 人人草人人干| 最近日本中文字幕| 欧美金发大战黑人最粗videos| 国产91ⅴ在线精品免费观看| 日韩电影在线免费观看| 污视频在线观看网站| 97久久香蕉国产线看观看| 亚洲国产精品91| 亚洲免费一区二区| 你懂的免费在线观看| 亚洲天堂一区| 免费看欧美女人艹b| 神马影院午夜我不卡影院| 国产精品丝袜一区二区| 美女精品在线| 久久久久国产精品视频| 亚洲成人av福利| 久久久精品人妻无码专区| 免费网站成人| 国产精品成人一区二区艾草| 久久丝袜美腿综合| 污网站免费在线观看| 日韩人妻无码一区二区三区99| 免费av手机在线观看| sese在线| 免费欧美在线| 国内在线精品| 波多野结衣综合网|