android守护进程
在早些时候,我们可以通过在
1. service中重写onStartCommand方法,这个方法有三个返回值, START_STICKY是service被kill掉后自动
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
2. 配置android:persistent="true"
3. setForeground(true);
4. android:process=”com.xxx.xxxservice”配置到单独的进程中
以上的方法要么只是提升service优先级或者存活率, 并不能解决被安全软件强行杀死的问题.
要么像第四种单独的进程运行service在360老的版本是可以的,但是在360的比较新的版本中仍然会被杀死.
如何保持Service的运行状态是现在要说明的,核心就是利用ANDROID的系统广播,触发自己的程序检查Service的运行状态,如果被杀掉,就再起来。
常用的有开机广播,解锁屏幕的广播,电量变化等等, 其中解屏的广播算比较频繁的了,但是也并不能保证一定的频率,尤其是在特定的时间里(比如用户睡觉的时候,用户并不进行解锁操作).而我们仍要做一些操作的时候,就没有办法了.
因此,我采用了一种别的方案. 另外再加上两个类似一守护进程的Service, 分别检查Service的运行状态,注册响应的广播,对其进行守护,一旦发现没有运行就将其启动.
我利用的系统广播是
Intent.ACTION_TIME_TICK,这个广播每分钟发送一次,我们可以每分钟检查一次Service的运行状态,如果已经被结束了,就重新启动Service。
它的优点就是间隔时间短而且非常稳定, 而其他的广播并不能保证这一点,当然,在具体的应用中还是要根据需求使用, 结合其他广播来保证自己的service一定会被重启.
毕竟现在安全软件是越来越厉害了,更新得也是非常频繁. 有时间还是要看下还有没有其他的方法,综合几种来使用.
下边就是具体的代码和注意事项了:
1、 Intent.ACTION_TIME_TICK的使用
我们知道广播的注册有静态注册和动态注册,但此系统广播只能通过动态注册的方式使用。即你不能通过在manifest.xml里注册的方式接收到这个广播,只能在代码里通过
registerReceiver()方法注册。
在ThisApp extends Application 或者在service里注册广播:
- IntentFilter filter = newIntentFilter(Intent.ACTION_TIME_TICK);
- MyBroadcastReceiver receiver = new MyBroadcastReceiver();
- registerReceiver(receiver, filter);
在广播接收器MyBroadcastReceiver extends BroadcastReceiver的onReceive里
- boolean isServiceRunning = false;
- if (intent.getAction().equals(Intent.ACTION_TIME_TICK)) {
- //检查Service状态
- ActivityManager manager = (ActivityManager)AppApplication.getContext().getSystemService(Context.ACTIVITY_SERVICE);
- for (RunningServiceInfo service :manager.getRunningServices(Integer.MAX_VALUE)) {
- if("so.xxxx.xxxxService".equals(service.service.getClassName()))
- {
- isServiceRunning = true;
- }
- }
- if (!isServiceRunning) {
- Intent i = new Intent(context, xxxService.class);
- context.startService(i);
- }
- }
终极解决方案: 使用Kni,在 c端 fork进程,检测Service是否存活,若Service已被杀死,则进行重启Service. 至于检测方式,可以轮询获取子进程Pid,若为1, 则说明子进程被Init进程所领养,已经成为了孤儿进程. 但是这种方式比较消耗电量,并且由于不同手机系统定制的改变,当应用被强制停止时,父进程并不一定被真正杀死,因此在一些特定机型上是无法通过此方式进行判断. 这里推荐使用liunx socket的方式进行类似心跳包的检测,并且当触发检测Service是否被杀死之前,需要判断应用是否已经被卸载,如果应用已经被卸载,则不再进行检测Service行为,直接调用exit(0)退出子进程,避免浪费系统资源和消耗电量.
android守护进程相关推荐
- android守护进程详解
本文参考"腾讯Bugly(http://bugly.qq.com)" Android 进程拉活包括两个层面: A. 提供进程优先级,降低进程被杀死的概率 B. 在进程被杀死后,进行 ...
- linux怎么监控守护进程,linux shell脚本守护进程监控svn服务
最近搭建的svn服务不知道什么原因服务总是被关闭(如果你不知道怎么搭建svn可以参考linux下搭建svn版本控制软件),因此用shell脚本实现一个守护进程.用于监控svn服务是否启动,如果服务不在 ...
- 守护进程通信之Socket
前置文章 <创建Android守护进程(底层服务) > 前言 在文章 <创建Android守护进程(底层服务) > 中,学习了如何创建一个 Android 守护进程,但是这个进 ...
- 浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路(1)
上一篇文章Android进程间通信(IPC)机制Binder简要介绍和学习计划简要介绍了Android系统进程间通信机制Binder的总体架构,它由Client.Server.Service Mana ...
- android双进程守护耗电,Android实现双进程守护
做过android开发的人应该都知道应用会在系统资源匮乏的情况下被系统杀死!当后台的应用被系统回收之后,如何重新恢复它呢?网上对此问题有很多的讨论.这里先总结一下网上流传的各种解决方案,看看这些办法是 ...
- android 8 ril,Android系统启动——8 附录2:相关守护进程简介
本次系列的内容如下: 在init.rc中定义了很多系统的守护进程,这里主要是做一些简单的介绍 一.uevent 负责相应uevent事件,创建设备节点文件: 代码在init.rc 550行 550se ...
- Android 系统(271)---进程、守护进程的实现及进程拉活
进程.守护进程的实现及进程拉活 1,概念 1)守护进程(Daemon) 是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某些任务.android中守护进程的实现主要由Service来完成. ...
- Android 系统内的守护进程 - main类服务(1) : netd
声明 工作需要,分析netd 其实很好奇Android系统中的一些关键守护进程服务的作用: 本文使用的代码是LineageOS的cm-14.1,对应Android 7.1.2,可以参考我的另一篇博客: ...
- Android 系统内的守护进程 - core类中的服务 (5) : logd
声明 工作需要,分析logd 其实很好奇Android系统中的一些关键守护进程服务的作用: 本文使用的代码是LineageOS的cm-14.1,对应Android 7.1.2,可以参考我的另一篇博客: ...
- Android 通过JNI实现守护进程
转载请注明出处:http://blog.csdn.net/yyh352091626/article/details/50542554 开发一个需要常住后台的App其实是一件非常头疼的事情,不仅要应对国 ...
最新文章
- 表弟高考650多,程序员不建议学计算机,亲戚:你不希望别人好
- 分段路由:一个新的SDN内部技术—Vecloud
- LINUX系统以及ANDROID 平台log信息输出级别设置 [MTK]
- SpringBoot同时集成Redis和Guava作为缓存组件--进一步分析代码
- UNICODE与UTF-8的转换
- Redis数据分布一致性哈希
- 200多个js技巧代码(五)
- Linux编程(3)_vim的使用
- 光模块价格由带宽还是距离决定_5G光模块市场:行“提量降本”之道 走“技术深耕”之途...
- 智能电视主流的CPU有三家。一个是Mstar(晨星),另两个是MTK和Amlogic(晶晨)
- vba formula 公式的引用
- 什么是管理者的有用功
- sap固定资产号码范围_SAP 固定资产的配置与逻辑
- 百度AI Studio飞桨平台 “深度学习”结课总结
- 多彩的书写工具,画图写字更好看,米家液晶小黑板多彩版上手
- 低功耗设计及其UPF实现第四节(最后一节)
- 【软考】【计算机网络】OSI/RM模型及相应硬件
- 工信部叫停苹果 Callkit,微信不能直接接听视频了
- 2020中国游戏公司财报分析《笔记》
- 非暴力沟通——读后感
热门文章
- spark sql python_Spark 3.0开发近两年终于发布,流、Python、SQL重大更新详解
- html内容超出不自动滚动,16.css: overflow使用 例: 固定div大小,不让内容超出div
- js 中添加php数组,浅谈javascript中数组Array的添加/删除操作
- c++ 一个函数包括多个返回值判断_整活函数式编程
- python设置很大的刻度_【Matplotlib】设置刻度(1)
- linux常用命令V1.1
- linux web目录安全设置,[LNMP]Linux的Web环境的安全配置
- 联合哈佛大学,Google 要用人工智能来预测地震余震
- 遗传算法的基本概念和实现(附 Java 实现案例)
- Android--sharepreference总结