Android AlarmManager實(shí)現(xiàn)定時(shí)循環(huán)后臺(tái)任務(wù)
這篇文章使用AlarmManager實(shí)現(xiàn)了Android定時(shí)后臺(tái)循環(huán)任務(wù)。使用場景:項(xiàng)目需要app每隔一段時(shí)間就去服務(wù)端請(qǐng)求一次接口,從而更新本地保存的信息。
AlarmManager簡介
AlarmManager是Android中常用的一種系統(tǒng)級(jí)別的提示服務(wù),在特定的時(shí)刻為我們廣播一個(gè)指定的Intent。簡單的說就是我們設(shè)定一個(gè)時(shí)間,然后在該時(shí)間到來時(shí),AlarmManager為我們廣播一個(gè)我們設(shè)定的Intent,通常我們使用 PendingIntent。
項(xiàng)目功能簡介:
- AlarmService模擬后臺(tái)任務(wù),定時(shí)發(fā)起廣播
- AlarmReceive啟動(dòng)AlarmService,達(dá)到循環(huán)啟動(dòng)Service的效果
通過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();
//通過AlarmManager定時(shí)啟動(dòng)廣播
AlarmManager alarmManager= (AlarmManager) getSystemService(ALARM_SERVICE);
long triggerAtTime=SystemClock.elapsedRealtime()+ONE_Miniute;//從開機(jī)到現(xiàn)在的毫秒書(手機(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中注冊廣播和服務(wù):
<service android:name=".service.AlarmService" android:enabled="true" android:exported="true"/> <receiver android:name=".receive.AlarmReceive"/>
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android實(shí)現(xiàn)探探圖片滑動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)探探圖片滑動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
listview 選中高亮顯示實(shí)現(xiàn)方法
當(dāng)點(diǎn)擊左側(cè)ListView后,選中的一行就會(huì)一直呈高亮狀態(tài)顯示,圖中選中行字的顏色顯示為藍(lán)色(注意:是選中行后一直高亮,而不是只是點(diǎn)擊時(shí)高亮),如果再次點(diǎn)擊另外的一行, 則新的那一行就高亮,下面就來實(shí)現(xiàn)這個(gè)高亮效果的顯示2012-11-11
Android中LeakCanary檢測內(nèi)存泄漏的方法
本篇文章主要介紹了Android中LeakCanary檢測內(nèi)存泄漏的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09
Android后臺(tái)啟動(dòng)Activity的實(shí)現(xiàn)示例
這篇文章主要介紹了Android后臺(tái)啟動(dòng)Activity的實(shí)現(xiàn)示例,幫助大家更好的理解和學(xué)習(xí)使用Android開發(fā),感興趣的朋友可以了解下2021-04-04
Android用Scroller實(shí)現(xiàn)一個(gè)可向上滑動(dòng)的底部導(dǎo)航欄
本篇文章主要介紹了Android用Scroller實(shí)現(xiàn)一個(gè)可上滑的底部導(dǎo)航欄,具有一定的參考價(jià)值,有興趣的小伙伴們可以參考一下2017-07-07
Android 開發(fā)隱藏標(biāo)題欄的方法總結(jié)
這篇文章主要介紹了android 開發(fā)隱藏標(biāo)題欄的方法總結(jié)的相關(guān)資料,需要的朋友可以參考下2017-04-04
Android中通過樣式來去除app的頭及界面全屏(備忘)的實(shí)現(xiàn)方法
這篇文章主要介紹了Android中通過樣式來去除app的頭及界面全屏(備忘)的相關(guān)資料,需要的朋友可以參考下2016-12-12
Android實(shí)現(xiàn)可復(fù)用的選擇頁面
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)可復(fù)用的選擇頁面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06

