使用AlarmManager來實(shí)現(xiàn)定時(shí)任務(wù)

#使用的情景:


? ? ?App有測(cè)量功能,測(cè)量后把數(shù)據(jù)保存到Sqlite里,要實(shí)現(xiàn)把測(cè)量的數(shù)據(jù)上傳到服務(wù)器。一般有兩種處理方式:1. 用戶點(diǎn)擊按鈕后,實(shí)現(xiàn)數(shù)據(jù)上傳到服務(wù)器 ? 2. 實(shí)現(xiàn)自動(dòng)上傳數(shù)據(jù)到服務(wù)器。

#效果



每隔五秒會(huì)請(qǐng)求一次

只要在連網(wǎng)了的情況下,每隔五秒就會(huì)去查詢數(shù)據(jù),看是否有新的數(shù)據(jù),如果有就會(huì)把數(shù)據(jù)查詢出來,轉(zhuǎn)成Json上傳到服務(wù)器。

#代碼


PollingUtils

PollingUtils啟動(dòng)和關(guān)閉定時(shí)任務(wù)。


-------------------------------------------------------------------------------------------

Service

Service開啟服務(wù),在服務(wù)里面的線程執(zhí)行你需要的邏輯。


-------------------------------------------------------------------------------------------

啟動(dòng)

在合適的地方啟動(dòng)定時(shí)任務(wù)。這里有四個(gè)參數(shù):第一個(gè)參數(shù)---上下文,第二個(gè)參數(shù)---設(shè)置時(shí)間間隔,第三個(gè)參數(shù)---執(zhí)行任務(wù)的服務(wù),第四個(gè)參數(shù)---服務(wù)的Aciton(標(biāo)志)。


#實(shí)現(xiàn)步驟:

1.在MainActivity啟動(dòng):

PollingUtils.startPollingService(this,5,PollingService.class,PollingService.ACTION);

2.PollingUtils工具類:

public classPollingUtils {

private staticAlarmManageralarmManager;

//開啟輪詢服務(wù)

public static voidstartPollingService(Context context, intseconds,Class cls,String action) {

LogUtils.i("PollingUtils","==Start polling service...");

//獲取AlarmManager系統(tǒng)服務(wù)

alarmManager= (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

//需要執(zhí)行Service的Intent

Intent intent =newIntent(context,cls);

intent.setAction(action);

PendingIntent pendingIntent = PendingIntent.getService(context,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);

//觸發(fā)服務(wù)的起始時(shí)間

longtriggerAtTime = SystemClock.elapsedRealtime();

//使用AlarmManger的setRepeating方法設(shè)置定期執(zhí)行的時(shí)間間隔(seconds秒)和需要執(zhí)行的Service

alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME,triggerAtTime,seconds *1000,pendingIntent);

}

//停止輪詢服務(wù)

public static voidstopPollingService(Context context,Class cls,String action) {

LogUtils.i("PollingUtils","==Stop polling service...");

alarmManager= (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

Intent intent =newIntent(context,cls);

intent.setAction(action);

PendingIntent pendingIntent = PendingIntent.getService(context,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);

//取消正在執(zhí)行的服務(wù)

alarmManager.cancel(pendingIntent);

}

}

3.服務(wù)PollingService

public classPollingServiceextendsService {

?public static finalStringACTION="com.hbxz.qkys.protocol.PollingService";

?privateGsonmGson;

privateStringmMachineNo;

@Override

publicIBinderonBind(Intent intent) {

return null;

}

@Override

public voidonCreate() {

if(mGson==null) {

mGson=newGson();

}

}

@Override

public voidonStart(Intent intent, intstartId) {

mMachineNo= (String) SharedPreferencesHelper.getData( UIUtils.getContext(),"MachineNo",SerialPortComm.MACHINENO);

newPollingThread().start();

}

intcount=0;//作為上傳數(shù)據(jù)是否正在運(yùn)行的標(biāo)志,1代表正在執(zhí)行

classPollingThreadextendsThread {

@Override

public void run() {

BaseApplication app = (BaseApplication) UIUtils.getContext();

//1.如果上傳數(shù)據(jù)沒正在運(yùn)行,就要開啟;

//2.如果已經(jīng)執(zhí)行,就不要開啟.

if(app.isConnectWifi&&count==0) {//Wifi開啟和count=0就執(zhí)行.

count++;//此時(shí)count就大于0了.

try{

queryDataTotal();

}catch(Exception e) {

count=0;//出錯(cuò)的情況

e.printStackTrace();

}

}

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、雞湯 appwidget是android中小組件,我們經(jīng)常說的widget其實(shí)是指的那些button、text...
    歡樂斗佛閱讀 2,389評(píng)論 1 8
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,500評(píng)論 19 139
  • 我記得我開始使用輪詢是在做直播項(xiàng)目的時(shí)候,當(dāng)時(shí)是在直播間中用來做彈幕的功能的。 在android中可以實(shí)現(xiàn)輪詢的方...
    Orz013閱讀 5,546評(píng)論 0 7
  • 立冬過后,天氣一天天涼起來了,早晚溫差有些大,早晨需要穿件薄線衫,中午還有些暖洋洋的,到了晚上起風(fēng)了又會(huì)覺得陣陣涼...
    五月的荷閱讀 392評(píng)論 11 10
  • 《瑯琊榜》這套書買回來將近快一年了,一直放在那沒有動(dòng)。前幾天實(shí)在找不到實(shí)體書了,就準(zhǔn)備把《瑯琊榜》再看一看。雖然已...
    冷冷123456閱讀 406評(píng)論 0 4

友情鏈接更多精彩內(nèi)容