Android AlarmManager實(shí)現(xiàn)定時(shí)循環(huán)后臺(tái)任務(wù)
這篇文章使用AlarmManager實(shí)現(xiàn)了Android定時(shí)后臺(tái)循環(huán)任務(wù)。使用場(chǎng)景:項(xiàng)目需要app每隔一段時(shí)間就去服務(wù)端請(qǐng)求一次接口,從而更新本地保存的信息。
AlarmManager簡(jiǎn)介
AlarmManager是Android中常用的一種系統(tǒng)級(jí)別的提示服務(wù),在特定的時(shí)刻為我們廣播一個(gè)指定的Intent。簡(jiǎn)單的說(shuō)就是我們?cè)O(shè)定一個(gè)時(shí)間,然后在該時(shí)間到來(lái)時(shí),AlarmManager為我們廣播一個(gè)我們?cè)O(shè)定的Intent,通常我們使用 PendingIntent。
項(xiàng)目功能簡(jiǎn)介:
- AlarmService模擬后臺(tái)任務(wù),定時(shí)發(fā)起廣播
- AlarmReceive啟動(dòng)AlarmService,達(dá)到循環(huán)啟動(dòng)Service的效果
通過(guò)Service和Receiver的死循環(huán),確保后臺(tái)任務(wù)不被系統(tǒng)殺死。
1.AlarmService類
/** * 一個(gè)定時(shí)任務(wù) */ public class AlarmService extends Service { /** * 每1分鐘更新一次數(shù)據(jù) */ private static final int ONE_Miniute=60*1000; private static final int PENDING_REQUEST=0; public AlarmService() { } /** * 調(diào)用Service都會(huì)執(zhí)行到該方法 */ @Override public int onStartCommand(Intent intent, int flags, int startId) { //這里模擬后臺(tái)操作 new Thread(new Runnable() { @Override public void run() { Log.e("wj","循環(huán)執(zhí)行了,哈哈."+ System.currentTimeMillis()); } }).start(); //通過(guò)AlarmManager定時(shí)啟動(dòng)廣播 AlarmManager alarmManager= (AlarmManager) getSystemService(ALARM_SERVICE); long triggerAtTime=SystemClock.elapsedRealtime()+ONE_Miniute;//從開(kāi)機(jī)到現(xiàn)在的毫秒書(shū)(手機(jī)睡眠(sleep)的時(shí)間也包括在內(nèi) Intent i=new Intent(this, AlarmReceive.class); PendingIntent pIntent=PendingIntent.getBroadcast(this,PENDING_REQUEST,i,PENDING_REQUEST); alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,triggerAtTime,pIntent); return super.onStartCommand(intent, flags, startId); } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. throw new UnsupportedOperationException("Not yet implemented"); } }
2 AlarmReceive類
public class AlarmReceive extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { //循環(huán)啟動(dòng)Service Intent i = new Intent(context, AlarmService.class); context.startService(i); } }
3 啟動(dòng)Service
public void startService(View view){ Intent intent=new Intent(this, AlarmService.class); startService(intent); }
別忘了AndroidMainfest中注冊(cè)廣播和服務(wù):
<service android:name=".service.AlarmService" android:enabled="true" android:exported="true"/> <receiver android:name=".receive.AlarmReceive"/>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android實(shí)現(xiàn)探探圖片滑動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)探探圖片滑動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06listview 選中高亮顯示實(shí)現(xiàn)方法
當(dāng)點(diǎn)擊左側(cè)ListView后,選中的一行就會(huì)一直呈高亮狀態(tài)顯示,圖中選中行字的顏色顯示為藍(lán)色(注意:是選中行后一直高亮,而不是只是點(diǎn)擊時(shí)高亮),如果再次點(diǎn)擊另外的一行, 則新的那一行就高亮,下面就來(lái)實(shí)現(xiàn)這個(gè)高亮效果的顯示2012-11-11Android中LeakCanary檢測(cè)內(nèi)存泄漏的方法
本篇文章主要介紹了Android中LeakCanary檢測(cè)內(nèi)存泄漏的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09Android后臺(tái)啟動(dòng)Activity的實(shí)現(xiàn)示例
這篇文章主要介紹了Android后臺(tái)啟動(dòng)Activity的實(shí)現(xiàn)示例,幫助大家更好的理解和學(xué)習(xí)使用Android開(kāi)發(fā),感興趣的朋友可以了解下2021-04-04Android用Scroller實(shí)現(xiàn)一個(gè)可向上滑動(dòng)的底部導(dǎo)航欄
本篇文章主要介紹了Android用Scroller實(shí)現(xiàn)一個(gè)可上滑的底部導(dǎo)航欄,具有一定的參考價(jià)值,有興趣的小伙伴們可以參考一下2017-07-07Android 開(kāi)發(fā)隱藏標(biāo)題欄的方法總結(jié)
這篇文章主要介紹了android 開(kāi)發(fā)隱藏標(biāo)題欄的方法總結(jié)的相關(guān)資料,需要的朋友可以參考下2017-04-04Android中通過(guò)樣式來(lái)去除app的頭及界面全屏(備忘)的實(shí)現(xiàn)方法
這篇文章主要介紹了Android中通過(guò)樣式來(lái)去除app的頭及界面全屏(備忘)的相關(guān)資料,需要的朋友可以參考下2016-12-12Android實(shí)現(xiàn)可復(fù)用的選擇頁(yè)面
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)可復(fù)用的選擇頁(yè)面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06