解析Android中如何做到Service被關(guān)閉后又自動啟動的實(shí)現(xiàn)方法
還是看下面的全部代碼吧,不過多解釋了。這些代碼中還是有不少概念的,不熟悉AlarmManager、PendingIntent、BroadcastReceiver、Service等等這些概念的同學(xué)可以百度一下。
package com.arui.framework.android.daemonservice;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.SystemClock;
public class BootBroadcast extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent mintent) {
if (Intent.ACTION_BOOT_COMPLETED.equals(mintent.getAction())) {
// 啟動完成
Intent intent = new Intent(context, Alarmreceiver.class);
intent.setAction("arui.alarm.action");
PendingIntent sender = PendingIntent.getBroadcast(context, 0,
intent, 0);
long firstime = SystemClock.elapsedRealtime();
AlarmManager am = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
// 10秒一個周期,不停的發(fā)送廣播
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstime,
10 * 1000, sender);
}
}
}
package com.arui.framework.android.daemonservice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class Alarmreceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("arui.alarm.action")) {
Intent i = new Intent();
i.setClass(context, DaemonService.class);
// 啟動service
// 多次調(diào)用startService并不會啟動多個service 而是會多次調(diào)用onStart
context.startService(i);
}
}
}
package com.arui.framework.android.daemonservice;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class DaemonService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
Log.v("=========", "***** DaemonService *****: onCreate");
}
@Override
public void onStart(Intent intent, int startId) {
Log.v("=========", "***** DaemonService *****: onStart");
// 這里可以做Service該做的事
}
}
下面是manifest文件的代碼。
<receiver
android:name=" com.arui.framework.android.daemonservice.BootBroadcast"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<receiver
android:name=" com.arui.framework.android.daemonservice.Alarmreceiver" >
<intent-filter>
<action android:name="arui.alarm.action" />
</intent-filter>
</receiver>
<service
android:name="com.arui.framework.android.daemonservice.DaemonService" >
</service>
相關(guān)文章
Android控件PullRefreshViewGroup實(shí)現(xiàn)下拉刷新和上拉加載
這篇文章主要為大家詳細(xì)介紹了Android控件PullRefreshViewGroup實(shí)現(xiàn)下拉刷新和上拉加載效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03
Android中兩個類讓你再也不用實(shí)現(xiàn)onActivityResult()
這篇文章主要給大家介紹了關(guān)于Android中兩個類讓你再也不用實(shí)現(xiàn)onActivityResult()的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧2018-08-08
Android如何監(jiān)測文件夾內(nèi)容變化詳解
最近在開發(fā)android應(yīng)用程序的時候遇到了一個監(jiān)測文件夾的功能,所以下面這篇文章主要給大家介紹了關(guān)于Android如何監(jiān)測文件夾內(nèi)容變化的相關(guān)資料,需要的朋友可以參考下2021-12-12
rxjava+retrofit實(shí)現(xiàn)多圖上傳實(shí)例代碼
本篇文章主要介紹了rxjava+retrofit實(shí)現(xiàn)多圖上傳實(shí)例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06
深入理解Android熱修復(fù)技術(shù)原理之資源熱修復(fù)技術(shù)
Android資源的熱修復(fù),就是在app不重新安裝的情況下,利用下發(fā)的補(bǔ)丁包 直接更新本app中的資源2021-06-06
詳解Android Material設(shè)計中陰影效果的實(shí)現(xiàn)方法
這篇文章主要介紹了Android Material設(shè)計中陰影效果的實(shí)現(xiàn)方法,包括自定義陰影的輪廓和裁剪等,需要的朋友可以參考下2016-04-04
Android使用NestedScrollView?內(nèi)嵌RecycleView滑動沖突問題解決
這篇文章主要介紹了Android使用NestedScrollView?內(nèi)嵌RecycleView滑動沖突問題解決,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下2022-06-06

