Service组件在android开发中经常用到,经常作为后台服务,需要一直保持运行,负责处理一些不必展示的任务。而一些安全软件,会有结束进程的功能,如果不做Service的保持,就会被其杀掉。

那么如何保持Service的运行状态,核心就是利用ANDROID的系统广播,这一不会被其他软件影响的常驻程序触发自己的程序检查Service的运行状态,如果被杀掉,就再起来。
在众多的Intent的action动作中,Intent.ACTION_TIME_TICK是比较特殊的一个,根据SDK描述:

Broadcast Action: The current time has changed. Sent every minute. You can not receive this through components declared in manifests, only by exlicitly registering for it withContext.registerReceiver()

意思是说这个广播动作是以每分钟一次的形式发送。但你不能通过在manifest.xml里注册的方式接收到这个广播,只能在代码里通过registerReceiver()方法注册。根据此我们可以每分钟检查一次Service的运行状态,如果已经被结束了,就重新启动Service。
所以只能通过动态注册了,若要持久 我们索性在application里面注册

IntentFilter filter=new IntentFilter(Intent.ACTION_TIME_TICK);
registerReceiver(receiver, filter);

在onReceive中

public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_TIME_TICK)) { }
}

OK 下面我们看下测试代码的核心部位 也就是检测服务是否启动

@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_TIME_TICK)) {
// 检查Service状态
boolean isServiceRunning = false; ActivityManager manager = (ActivityManager) app
.getApplicationContext().getSystemService(
Context.ACTIVITY_SERVICE);
//获取正在运行的服务去比较
for (RunningServiceInfo service : manager
.getRunningServices(Integer.MAX_VALUE)) {
Log.i("Running", service.service.getClassName());
if ("com.example.android_service.MyService"
.equals(service.service.getClassName()))
// Service的类名
{
isServiceRunning = true;
}
}
Log.i("isRunning", isServiceRunning + "");
if (!isServiceRunning) {
Log.i("isRunningOK", isServiceRunning + "");
Intent i = new Intent(context, MyService.class);
app.getApplicationContext().startService(i);
}
}
}

上面清楚的写明了逻辑 获取的是正在运行的服务 用我们的服务去比较如果没有就启动有的话就不用管了

 

Android Service后台服务进程意外被kill掉之后如何重启的更多相关文章

  1. Android SERVICE后台服务进程的自启动和保持

    Service组件在android开发中经常遇到,其经常作为后台服务,需要始终保持运行,负责处理一些必要(见不得人)的任务.而一些安全软件,如360等,会有结束进程的功能,如果不做Service的保持 ...

  2. [Android]android Service后台防杀

    网上有很多办法,方法一:在JNI里面fork出子进程service在单独的进程中,在service中调用JNI的代码,然后fork出一个进程,然后让我们的service进程和fork出来的子进程一直运 ...

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

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

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

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

  5. android 程序防止被360或者系统给kill掉

    关于如果和防止android 程序防止被360kill掉之后重启的问题,肯定大家也搜索了好多方法,都不好使,对不对,什么增高权限了,什么进程优先级了,这些东西都不是我们可控的,所以有没有一些非常保险的 ...

  6. 关于防止App被第三方应用Kill掉的问题

    由于一些需求的原因需要让自己App长时间在后台.虽然这样的做法是很Orz的,但是由于项目需求有时候不得不这样做.QQ.微信之所以没被第三方应用直接给kill掉,从市场原因腾讯的软件已经深入人心,很多厂 ...

  7. Android下写一个永远不会被KILL掉的进程/服务

    Android 系统对于内存管理有自己的一套方法,为了保障系统有序稳定的运信,系统内部会自动分配,控制程序的内存使用.当系统觉得当前的资源非常有限的时候,为了保证一些优先级高的程序能运行,就会杀掉一些 ...

  8. 【转】Android Service被关闭后自动重启,解决被异常kill 服务

    http://www.kaifajie.cn/android/10182-2.html 每次调用startService(Intent)的时候,都会调用该Service对象的onStartComman ...

  9. 防止Android程序被系统kill掉的处理方法

    转载请注明出处:http://blog.csdn.net/cuiran/article/details/38851401 目前遇到一个问题程序需要一直运行,并显示在最前端,但是运行一段时间发现会被系统 ...

  10. 如何让Service自动重启而不被kill掉

    重写service的onStartCommand方法. @Override    public int onStartCommand(Intent intent, int flags, int sta ...

随机推荐

  1. 【邮件伪造】SPF与DKIM验证原理及实战解析(上)

    0x01 前言 大家好,我是VoltCary 本篇文章是系列邮件安全专题的第一篇,主要帮助大家掌握邮件安全的基础知识. 基础内容包括: SMTP协议 邮件安全验证原理与过程 SPF验证与DKIM签名验 ...

  2. 鸿蒙NEXT开发案例:世界时间表

    [引言] 本案例将展示如何使用鸿蒙NEXT框架开发一个简单的世界时钟应用程序.该应用程序能够展示多个城市的当前时间,并支持搜索功能,方便用户快速查找所需城市的时间信息.在本文中,我们将详细介绍应用程序 ...

  3. CI/CD集成规范

    集成方式说明 a.用户向Gitlab提交代码,代码中包含 Dockerfile, JenkinsFile文件. b.Jenkins监听Gitlab代码库的推送和变更事件 c.Jenkins调用mave ...

  4. 备份场景全覆盖!腾讯云备份一体机 B2000给您全方位保护

    TStor 是腾讯云面向混合云场景打造的存储一体机产品系列.继年初发布对象存储一体机之后,该产品系列再添新成员:TStor B2000,是面向混合云备份场景的一体机产品. 根据权威咨询机构 IDC 和 ...

  5. JVM简介—1.Java内存区域

    大纲 1.运行时数据区的介绍 2.运行时数据区各区域的作用 3.各个版本内存区域的变化 4.直接内存的使用和作用 5.站在线程的角度看Java内存区域 6.深入分析堆和栈的区别 7.方法的出入栈和栈上 ...

  6. remove a git submodule

    参考: http://stackoverflow.com/questions/1260748/how-do-i-remove-a-submodule 1. Delete the relevant se ...

  7. 【转载】理解分布式id生成算法SnowFlake

    分布式id生成算法的有很多种,Twitter的SnowFlake就是其中经典的一种. https://segmentfault.com/a/1190000011282426 概述 SnowFlake算 ...

  8. leetcode 05 回文字符串

    leetcode 05 回文字符串 1. 描述 给你一个字符串,找到里面最长的回文字符串 2. 事例 示例 1: 输入:s = "babad" 输出:"bab" ...

  9. Qt视频监控系统一个诡异问题的解决思路(做梦都想不到)

    一.前言 由于Qt版本众多,几百个版本之间存在不兼容的情况,为此如果要兼容很多版本,没有取巧的办法和特殊的捷径,必须自己亲自安装各个版本编译运行并测试,大问题一般不会有,除非缺少模块,小问题还是不断有 ...

  10. Qt编写地图综合应用37-覆盖物多边形

    一.前言 多边形主要的应用场景是用来框起一块区域,然后根据坐标点集合,找到该区域内的标注点集合,比如指定某个县市区域多边形,然后找到这个县市对应的所有站点,拿到这些站点在做其他处理. 二.功能特点 同 ...