Android Service后台服务进程意外被kill掉之后如何重启
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掉之后如何重启的更多相关文章
- Android SERVICE后台服务进程的自启动和保持
Service组件在android开发中经常遇到,其经常作为后台服务,需要始终保持运行,负责处理一些必要(见不得人)的任务.而一些安全软件,如360等,会有结束进程的功能,如果不做Service的保持 ...
- [Android]android Service后台防杀
网上有很多办法,方法一:在JNI里面fork出子进程service在单独的进程中,在service中调用JNI的代码,然后fork出一个进程,然后让我们的service进程和fork出来的子进程一直运 ...
- Android 保持Service不被Kill掉的方法--双Service守护 && Android实现双进程守护
本文分为两个部分,第一部分为双Service守护,第二部分为双进程守护 第一部分: 一.Service简介:Java.lang.Object ↳Android.content.Context ↳an ...
- 保持Service不被Kill掉的方法--双Service守护 && Android实现双进程守护
本文分为两个部分,第一部分为双Service守护,第二部分为双进程守护 第一部分: 一.Service简介:Java.lang.Object ↳Android.content.Context ↳an ...
- android 程序防止被360或者系统给kill掉
关于如果和防止android 程序防止被360kill掉之后重启的问题,肯定大家也搜索了好多方法,都不好使,对不对,什么增高权限了,什么进程优先级了,这些东西都不是我们可控的,所以有没有一些非常保险的 ...
- 关于防止App被第三方应用Kill掉的问题
由于一些需求的原因需要让自己App长时间在后台.虽然这样的做法是很Orz的,但是由于项目需求有时候不得不这样做.QQ.微信之所以没被第三方应用直接给kill掉,从市场原因腾讯的软件已经深入人心,很多厂 ...
- Android下写一个永远不会被KILL掉的进程/服务
Android 系统对于内存管理有自己的一套方法,为了保障系统有序稳定的运信,系统内部会自动分配,控制程序的内存使用.当系统觉得当前的资源非常有限的时候,为了保证一些优先级高的程序能运行,就会杀掉一些 ...
- 【转】Android Service被关闭后自动重启,解决被异常kill 服务
http://www.kaifajie.cn/android/10182-2.html 每次调用startService(Intent)的时候,都会调用该Service对象的onStartComman ...
- 防止Android程序被系统kill掉的处理方法
转载请注明出处:http://blog.csdn.net/cuiran/article/details/38851401 目前遇到一个问题程序需要一直运行,并显示在最前端,但是运行一段时间发现会被系统 ...
- 如何让Service自动重启而不被kill掉
重写service的onStartCommand方法. @Override public int onStartCommand(Intent intent, int flags, int sta ...
随机推荐
- Gitbook的docker安装配置
创建目录:/gitbook/gitbook 和 /gitbook/html /gitbook/gitbook目录下,touch新建README.md docker安装gitbook docker ru ...
- C++顺序结构(1)任务
1.下载并观看视频(照着做,多看几遍) https://www.jianguoyun.com/p/DWCNkNEQi8_wDBj5ptYFIAA 2.两项照着做的任务
- 第一个 milestone:内推 50 人拿到微软 offer!
就在昨天,我的一位候选人和我说,他已经通过面试,正在 offer 沟通阶段.由此,我达成第一个小里程碑:成功内推 50 人拿到了微软 offer! 内推了多少人? 从 2019 年年初开始内推,到现在 ...
- 2024年1月Java项目开发指南17:自动接口文档配置
Knife4j 文档 :https://doc.xiaominfo.com/ 有能力的建议自己去看文档配置,本文仅做参考,因为官方文档会更新,本文不会,以后说不定本文就过时了. ok,我们继续.虽然本 ...
- gitlab runner install
gitlab-runner install -d /home/gitlab-runner/ --syslog --user gitlab-runner
- kafka各个版本的特性
1. kafka-0.8.2 新特性 1.1 异步发送 producer不再区分同步(sync)和异步方式(async),所有的请求以异步方式发送,这样提升了客户端效率.producer请求会返回一个 ...
- Qt编写安防视频监控系统26-硬件加速
一.前言 硬件加速这个功能在一年多以前就已经具备,当时对两个内核一个是ffmpeg内核.一个是vlc内核都做了对应的接口函数,只是当时为了简单没有在系统设置中做出接口,vlc做硬件加速不用自己写代码实 ...
- C#中定义类时关于CLSCompliant属性的声明
今天在做code analysis时,遇到了这个提示 Warning 1 CA1014 : Microsoft.Design : Mark 'Demo.exe' with CLSCompliant(t ...
- 总是被低估,从未被超越,揭秘QQ极致丝滑背后的硬核IM技术优化
本文由腾讯云开发者张曌.毕磊分享,原题"QQ 9"傻快傻快"的?!带你看看背后的技术秘密",本文进行了排版和内容优化等. 1.引言 最新发布的 QQ 9 自上线 ...
- k8s集群部署项目完整过程记录
将k8s-web项目制作成镜像 构建 study/k8s-web:1.0 镜像 构建java环境并上传jar包 docker pull java:8u111 mkdir /usr/dockerfile ...