下面是两个服务
NewMsgFirstService.class
public class NewMsgFirstService extends Service { private int time = 5; @Override public void onCreate() { super.onCreate(); LogUtil.logi("----------start----------"); } @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { LogUtil.logi("---onStartCommand------one--"); checkServiceWork(); return START_STICKY; } private void checkServiceWork(){ if (checkNetWork()) { Timer timer = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { if(WebViewError.isRequestSuccess(code)){ Log.i("ServiceOne Run: " + System.currentTimeMillis()); boolean isServiceExist = ServiceUtil.isServiceWorked(NewMsgFirstService.this, "com.my.service.NewMsgSecondService"); if (!isServiceExist) { Intent service = new Intent(NewMsgTipsService.this, NewMsgSecondService.class); service.setClass(NewMsgFirstService.this, NewMsgSecondService.class); startService(service); } } } }; timer.schedule(task, 0, 5 * 1000); } }} NewMsgSecondService.class public class NewMsgDoubleService extends Service { private String code; @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); LogUtil.logi("Start ---------------ServiceTwo"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { mThread.start(); return START_REDELIVER_INTENT; } Thread mThread = new Thread(new Runnable() { @Override public void run() { timerRefresh(); } }); // 定時获取新消息 private void timerRefresh() { if (checkNetWork()) { Timer timer = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { Log.i("ServiceTwo Run---: ", System.currentTimeMillis()); boolean isServiceExist = ServiceUtil.isServiceWorked(NewMsgSecondService.this, "com.my.service.NewMsgFirstService"); if (!isServiceExist && WebViewError.isRequestSuccess(code)) { Intent service = new Intent(NewMsgSecondService.this, NewMsgFirstService.class); service.setClass(NewMsgSecondService.this, NewMsgFirstService.class); startService(service); } } }; timer.schedule(task, 0, 1 * 1 * 1000); } else { // NewMsgSecondService.this.stopSelf(); } } }
ServiceUtil.class工具类
public class ServiceUtil { /** * 判断服务是否运行 * @param context * @param serviceName * @return */ public static boolean isServiceWorked(Context context, String serviceName) { ActivityManager myManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); ArrayList<ActivityManager.RunningServiceInfo> runningService = (ArrayList<ActivityManager.RunningServiceInfo>) myManager.getRunningServices(Integer.MAX_VALUE); if(runningService != null){ for (int i = 0; i < runningService.size(); i++) { if (runningService.get(i).service.getClassName().toString().equals(serviceName)) { return true; } } } return false; } } 其实,Service守护并不能保证程序在后台一直运行,一段时间后还是会被系统kill掉整个进程,而service并没有进onDestroy()方法。要想不被kill,只能用户手动设置白名单了。哈哈,当然,也可以让厂商设置。。。。