之前,低版本做守护进程时,就是两个service 相互守护,但是大于5.0后,似乎就不管用了,今天我们来看看,怎么解决这个问题,多的不说,直接上代码:

首先是有业务处理的service:

public class GuardMessageService extends Service{@Overridepublic void onCreate() {super.onCreate();new Thread(new Runnable() {@Overridepublic void run() {while (true){System.out.println("=====守护进程======");try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}}}}).start();}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {startForeground(1,new Notification());bindService(new Intent(this, GuardService.class),connection, Context.BIND_IMPORTANT);return START_STICKY;}@Nullable@Overridepublic IBinder onBind(Intent intent) {return new GuardAidl.Stub() {};}private ServiceConnection connection=new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {//建立连接Toast.makeText(GuardMessageService.this,"建立连接",Toast.LENGTH_SHORT).show();}@Overridepublic void onServiceDisconnected(ComponentName name) {//连接断开了startService(new Intent(GuardMessageService.this,GuardService.class));bindService(new Intent(GuardMessageService.this, GuardService.class),connection, Context.BIND_IMPORTANT);}};}

2.守护的service:

public class GuardService extends Service{@Nullable@Overridepublic IBinder onBind(Intent intent) {return new GuardAidl.Stub() {};}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {startForeground(1,new Notification());bindService(new Intent(this, GuardMessageService.class),connection, Context.BIND_IMPORTANT);return START_STICKY;}private ServiceConnection connection=new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {//建立连接Toast.makeText(GuardService.this,"建立连接",Toast.LENGTH_SHORT).show();}@Overridepublic void onServiceDisconnected(ComponentName name) {//连接断开了startService(new Intent(GuardService.this,GuardMessageService.class));bindService(new Intent(GuardService.this, GuardMessageService.class),connection, Context.BIND_IMPORTANT);}};
}

3.为了解决5.0 以上,设置的一个service:

public class JobWakeUpService extends JobService{@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {JobInfo.Builder jobBuilder = new JobInfo.Builder(1,new ComponentName(this,JobWakeUpService.class));jobBuilder.setPeriodic(2000);JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);jobScheduler.schedule(jobBuilder.build());return START_STICKY;}@Overridepublic boolean onStartJob(JobParameters params) {// 判断服务有没有在运行boolean messageServiceAlive = serviceAlive(GuardMessageService.class.getName());if(!messageServiceAlive){startService(new Intent(this,GuardMessageService.class));}return false;}@Overridepublic boolean onStopJob(JobParameters params) {return false;}/*** 判断某个服务是否正在运行的方法*/private boolean serviceAlive(String serviceName) {boolean isWork = false;ActivityManager myAM = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);List<ActivityManager.RunningServiceInfo> myList = myAM.getRunningServices(100);if (myList.size() <= 0) {return false;}for (int i = 0; i < myList.size(); i++) {String mName = myList.get(i).service.getClassName().toString();if (mName.equals(serviceName)) {isWork = true;break;}}return isWork;}
}

最后是AndroidManifest.xml的配置:

 // JobService权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/><service android:name=".services.GuardService"android:process=":guardService"/><service android:name=".services.GuardMessageService"/><service android:name=".services.JobWakeUpService"android:enabled="true"android:permission="android.permission.BIND_JOB_SERVICE"/>

调用:

      //启动守护进程startService(new Intent(mContext, GuardMessageService.class));startService(new Intent(mContext, GuardService.class));if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){//必须大于5.0startService(new Intent(mContext,JobWakeUpService.class));}

Android 之 守护进程相关推荐

  1. android netd守护进程机制 --- netd分析

    3 netd分析 3.1 CommandListener初始化 CommandListener的构造方法分为3大步骤: 1,父类初始化,传入netd socket FrameworkListener( ...

  2. android 8 ril,Android系统启动——8 附录2:相关守护进程简介

    本次系列的内容如下: 在init.rc中定义了很多系统的守护进程,这里主要是做一些简单的介绍 一.uevent 负责相应uevent事件,创建设备节点文件: 代码在init.rc 550行 550se ...

  3. Android 系统(271)---进程、守护进程的实现及进程拉活

    进程.守护进程的实现及进程拉活 1,概念 1)守护进程(Daemon) 是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某些任务.android中守护进程的实现主要由Service来完成. ...

  4. 浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路(1)

    上一篇文章Android进程间通信(IPC)机制Binder简要介绍和学习计划简要介绍了Android系统进程间通信机制Binder的总体架构,它由Client.Server.Service Mana ...

  5. android双进程守护耗电,Android实现双进程守护

    做过android开发的人应该都知道应用会在系统资源匮乏的情况下被系统杀死!当后台的应用被系统回收之后,如何重新恢复它呢?网上对此问题有很多的讨论.这里先总结一下网上流传的各种解决方案,看看这些办法是 ...

  6. Android 保持Service不被Kill掉的方法--双Service守护 Android实现双进程守护

    本文分为两个部分,第一部分为双Service守护,第二部分为双进程守护 第一部分: 一.Service简介:Java.lang.Object ↳Android.content.Context  ↳an ...

  7. android进程守护 失效,保持Service不被Kill掉的方法--双Service守护 Android实现双进程守护 1...

    本文分为两个部分,第一部分为双Service守护,第二部分为双进程守护 第一部分: 一.Service简介:Java.lang.Object ?Android.content.Context ?and ...

  8. 保持Service不被Kill掉的方法--双Service守护 Android实现双进程守护 3

    第二部分: 做过android开发的人应该都知道应用会在系统资源匮乏的情况下被系统杀死!当后台的应用被系统回收之后,如何重新恢复它呢?网上对此问题有很多的讨论.这里先总结一下网上流传的各种解决方案,看 ...

  9. Android 系统内的守护进程 - main类服务(1) : netd

    声明 工作需要,分析netd 其实很好奇Android系统中的一些关键守护进程服务的作用: 本文使用的代码是LineageOS的cm-14.1,对应Android 7.1.2,可以参考我的另一篇博客: ...

最新文章

  1. linux启动exe出来SQLite问题,CentOS 7下sqlite3的问题修复
  2. 别再叫我“老工”!!!工程师姓什么很重要!
  3. RabbitMQ--topic
  4. java的继承关系linkedlist_LinkedList——JAVA成长之路
  5. Python爬虫教程:简书文章的抓取与存储
  6. mysql libs 5.1.73_【MySQL案例】mysql-libs-5.1.73-3.el6
  7. java数组基本操作
  8. Python 矩形积分法推荐采样点设置个数
  9. 密码学入门(7):数字签名和证书
  10. 在windows平台上打造Linux开发环境-洋葱先生-杨少通
  11. 【Unity2D入门教程氵篇】简单制作一个弹珠游戏之制作场景④(设置不可破坏砖块,发布游戏设置)
  12. 《快学BigData》--Linux 常用命令
  13. nyoj 海岛争霸(Floyd最短路径)
  14. 你搜索过的羞羞小网站,谷歌都悄悄帮你保存起来了
  15. (一)随处可见的LED广告屏是怎么工作的呢?
  16. 关于HP Diagnostics
  17. 『 云原生·Docker』Docker网络
  18. 笔记本 续航测试软件,最低5小时起 这些超长续航笔记本你一定不知道
  19. 7-10 高空坠球 (20 分) 皮球从某给定高度自由落下,触地后反弹到原高度的一半,再落下,再反弹,……,如此反复。问皮球在第n次落地时,在空中一共经过多少距离?第n次反弹的高度是多少?
  20. 某赛一道misc_gif隐写_rar密码暴力破解_AAencode

热门文章

  1. golang中的select原理解析
  2. 常微分方程的解法 (二): 欧拉(Euler)方法
  3. ElasticSearch es 插件开发
  4. 关于Excel文件导入
  5. 以太网MAC帧结构与数据填充
  6. python中实现多路分支的最佳控制结构是_python程序设计答案
  7. 一天实现用poi-tl导出word(饼图/柱状图、文字、表格、循环word),男朋友看完直呼好家伙
  8. html文字下加背景图片大全唯美,带文字的励志简约背景图片
  9. VLC各模块名称及功能介绍
  10. 《安富莱嵌入式周报》第313期:搬运机器人,微软出的C语言手册,开源生物信号采集板,开源SMD回流焊,开源SDR无线电,汽车级机器人评估板