`
阿尔萨斯
  • 浏览: 4166051 次
社区版块
存档分类
最新评论

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

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

在早些时候,我们可以通过在


1. service中重写onStartCommand方法,这个方法有三个返回值, START_STICKY是service被kill掉后自动


public int onStartCommand(Intent intent, int flags, intstartId) {

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)ThisApp.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); 
    } 


} 




分享到:
评论

相关推荐

    安卓后台保活服务service,自动重启APP

    安卓后台保活服务service,自动重启APP

    Android使用Service实现简单音乐播放实例

     Android中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行,例如我们打开一个音乐播放器来听音乐,在听音乐的...

    基于Android Service 生命周期的详细介绍

    Android中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行,那我们什么时候会用到Service呢?比如我们播放音乐...

    Android实验五.doc

    计算机科学与技术系 实 验 报 告 专业名称 计算机科学与技术 课程名称 Android嵌入式软件开发 项目名称 Service 后台服务 班 级 计科一班 学 号 姓 名 同组人员 无 实验日期 2016.10.11 一、实验目的与要求: 【实验...

    Android高级编程--源代码

    8.1.2 将活动和服务绑定 259 8.2 使用后台工作线程 260 8.2.1 创建新的线程 260 8.2.2 为GUI操作同步线程 261 8.2.3 将Earthquake Service移动到后台线程 262 8.3 创建一个Toast 263 8.3.1 定制Toast 263 ...

    《Android高级编程》

    7.7.9 将View固定到地图和地图的某个位置上 7.8 对Earthquake示例添加地图功能 7.9 小结 第8章 后台工作 8.1 服务简介 8.1.1 创建和控制服务 8.1.2 将活动和服务绑定 8.2 使用后台工作线程 8.2.1 创建新的线程 8.2.2...

    新版Android开发教程.rar

    的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • ...

    Android实现Service重启的方法

    这时候可能需要重启该服务,上网看了半天,有提到用Timer、AlarmManager去实现间歇性的发送广播启动Service(注册的广播接收后,启动Service),我实现了下,发现还是在B情况下还是不能满足。 我手机上装了一个卡卡...

    Android高级编程.pdf

    8.1.2 将活动和服务绑定 8.2 使用后台工作线程 8.2.1 创建新的线程 8.2.2 为GUI操作同步线程 8.2.3 将Earthquake Service移动到后台线程 8.3 创建一个Toast 8.3.1 定制Toast 8.3.2 在工作(worker)线程中使用Toast ...

    Android自主学习项目报告(一).doc

    Activity可见,但被其它Activity覆盖,没有获得焦点 停止状态:不可见,失去焦点 销毁状态:Activity结束,或所在进程被结束 Activity有4种启动模式,分别为standard、singleTop、singleTask和singleInsta nce (6...

    精通ANDROID 3(中文版)1/2

    14.3 长期运行的接收程序和服务  14.3.1 长期运行的广播接收程序协议  14.3.2 IntentService  14.3.3 IntentService源代码  14.4 为广播接收程序扩展IntentService  14.4.1 长期运行的广播服务抽象  ...

    Android Service(不和用户交互应用组件)案例分析

    Service是在一段不定的时间运行在后台,不和用户交互应用组件。每个Service必须在manifest中 通过<service>来声明。可以通过contect.startservice和contect.bindserverice来启动。 Service和其他的应用组件一样,...

    Android简单音乐播放实例

    Android中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行,例如我们打开一个音乐播放器来听音乐,在听音乐的...

    Android手机天气预报项目报告.docx

    这些天气数据是通过后台服务获取的,这个后台服务可以按照一定的时间间隔,通过Google提供的服务获取天气预报信息,并将天气信息保存在数据库中。 该软件的基本功能需求有: (1) 启动App Widget应用程序; (2) 设置...

    Android手机天气预报项目报告(1).docx

    这些天气数据是通过后台服务获取的,这个后台服务可以按照一定的时间间隔,通过Google提供的服务获取天气预报信息,并将天气信息保存在数据库中。 该软件的基本功能需求有: (1) 启动App Widget应用程序; (2) 设置...

    精通Android 3 (中文版)2/2

    14.3 长期运行的接收程序和服务  14.3.1 长期运行的广播接收程序协议  14.3.2 IntentService  14.3.3 IntentService源代码  14.4 为广播接收程序扩展IntentService  14.4.1 长期运行的广播服务抽象  ...

    (完整)Android手机天气预报项目报告.doc

    这些天气数据是通过后 台服务获取的,这个后台服务可以按照一定的时间间隔,通过Google提供的服务获取天气 预报信息,并将天气信息保存在数据库中。 该软件的基本功能需求有: (1) 启动App Widget应用程序; (2) 设置...

    计步器的实现

    android计步器的实现,自定义的一个弧形进度条,记步通过手机的传感器来实现,也就是说不支持传感器的机子(应该很老的了吧)就没有效果。看看效果图: 这里写图片描述这里写图片描述 自定义View public class ...

    androidReview:青岛理工大学15级安卓复习知识点

    其他特性很像Activity比后台Activity优先级高,不会被轻易终止即使service被终止,当系统资源恢复的时候,也将自动恢复运行状态,(onStartCommand 返回 START_STICKY)用于进程之间通信,解决两个安卓应用程序之间...

Global site tag (gtag.js) - Google Analytics