文档章节

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

蜀山下的鱼
 蜀山下的鱼
发布于 2015/04/29 00:38
字数 488
阅读 14
收藏 0

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


如何保持Service的运行状态是现在要说明的,核心就是利用ANDROID的系统广播,这一不会被其他软件影响的常驻程序触发自己的程序检查Service的运行状态,如果被杀掉,就再起来。


我利用的系统广播是Intent.ACTION_TIME_TICK,这个广播每分钟发送一次,我们可以每分钟检查一次Service的运行状态,如果已经被结束了,就重新启动Service。


下边就是具体的代码和注意事项了:


1、 Intent.ACTION_TIME_TICK的使用


我们知道广播的注册有静态注册和动态注册,但此系统广播只能通过动态注册的方式使用。即你不能通过在manifest.xml里注册的方式接收到这个广播,只能在代码里通过registerReceiver()方法注册。


在ThisApp extends Application 里注册广播:


IntentFilter filter = newIntentFilter(Intent.ACTION_TIME_TICK); 
MyBroadcastReceiver receiver = new MyBroadcastReceiver(); 
registerReceiver(receiver, filter); 
在广播接收器MyBroadcastReceiver extends BroadcastReceiver的onReceive里


if (intent.getAction().equals(Intent.ACTION_TIME_TICK)) { 
  
//检查Service状态 
  

2、Service的检查与启动


boolean isServiceRunning = false; 
ActivityManager manager = (ActivityManager)ThisApp.getContext().getSystemService(Context.ACTIVITY_SERVICE); 
for (RunningServiceInfo service :manager.getRunningServices(Integer.MAX_VALUE)) { 
if("so.xxxx.WidgetUpdateService".equals(service.service.getClassName())) 
       //Service的类名 

isServiceRunning = true; 

  
 } 
if (!isServiceRunning) { 
Intent i = new Intent(context, WidgetUpdateService.class); 
       context.startService(i); 

另一个话题,Service的开机启动。


实现和上边的类似,也是通过监控开机的系统广播来启动Service。但其实你做了上边的检查也就不会做开机启动了,因为过一两分钟就会通过上边的程序启动Service了。代码如下:


if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { 
Intent i = new Intent(context, LogService.class); 
    context.startService(i); 

    } 


DEMO:http://download.csdn.net/detail/caiwenfeng_for_23/7836515


  

本文转载自:http://blog.csdn.net/caiwenfeng_for_23/article/details/38909365

蜀山下的鱼
粉丝 9
博文 405
码字总数 0
作品 0
广州
高级程序员
私信 提问
Android Service 服务(一)—— Service

一、 Service简介 Service是android 系统中的四大组件之一(Activity、Service、BroadcastReceiver、ContentProvider),它跟Activity的级别差不多,但不能自己运行只能后台运行,并且可以和...

长平狐
2013/01/06
259
0
Android SERVICE后台服务进程的自启动和保持

Android SERVICE后台服务进程的自启动和保持 2012-12-27 10:30 佚名 eoeAndroid 我要评论(0) 字号:T | T Service组件在android开发中经常遇到,其经常作为后台服务,需要始终保持运行,负责...

zhouw
2014/03/29
132
0
Android之service

Service是Android四大组件中与Activity最相似的组件,他们都代表可执行的程序,Service与Activity的区别在于:Service一直在后台运行,他没有用户界面,所有绝对不会到前台来,一旦servcie被...

晨曦之光
2012/05/16
351
0
Android Service 服务

一、 Service简介 Service是android 系统中的四大组件之一(Activity、Service、BroadcastReceiver、ContentProvider),它跟Activity的级别差不多,但不能自己运行只能后台运行,并且可以和...

等待流星
2014/03/06
64
0
Android 进程和线程(一)

当一个应用程序组件启动并且应用还没有运行任何其他组件时,Android系统会给应用程序启动一个新的带有单一执行线程的Linux进程。默认情况下,同一应用程序的所有组件都运行在相同的进程和线程...

长平狐
2012/10/16
78
0

没有更多内容

加载失败,请刷新页面

加载更多

Knowage 6.2安装部署

注意:需要正确配置JAVA_HOME和JRE_HOME还有catalina_home,否则启动的时候tomcat一闪而过,想要获得报错信息,可以打开cmd,在dos命令行运行开始命令 官网:https://www.knowage-suite.com/s...

阿伦哥-
17分钟前
4
0
c++11 左值引用和右值引用

#include <iostream>using namespace std;void Print(string& s){ cout << s;}int main(){ string s="abc"; Print(s); // OK Print("abc"); // parse error......

SibylY
19分钟前
3
0
浅谈Facade外观模式

一、前言 外观模式是一种非常简单的模式,简单到我们经常都会使用,比如对于类A和B,如果两者需要交互,经过一定的处理过程才能实现某一个具体的功能,那么我们可以将这个处理的过程定义为一...

青衣霓裳
20分钟前
3
0
AnalyticDB for PostgreSQL 6.0 新特性介绍

阿里云 AnalyticDB for PostgreSQL 为采用MPP架构的分布式集群数据库,完备支持SQL 2003,部分兼容Oracle语法,支持PL/SQL存储过程,触发器,支持标准数据库事务ACID。ADB PG通过行存储、列存...

Mr_zebra
22分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部