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

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

 

重写service的onStartCommand方法。
@Override   
public int onStartCommand(Intent intent, int flags, int startId) {
        return START_STICKY;   
}
   简单介绍下这个方法,在Android开发的过程当中,每次调用startService(Intent)的时候,都会调用该Service对象的onStartCommand(Intent,int,int)方法,而后在onStartCommand方法中作一些处理。而后咱们注意到这个函数有一个int的返回值,这篇文章就是简单地讲讲int返回值的做用。    从Android官方文档中,咱们知道onStartCommand有4种返回值:
    START_STICKY:若是service进程被kill掉,保留service的状态为开始状态,但不保留递送的intent对象。随后系统会尝试从新建立service,因为服务状态为开始状态,因此建立服务后必定会调用onStartCommand(Intent,int,int)方法。若是在此期间没有任何启动命令被传递到service,那么参数Intent将为null。
    START_NOT_STICKY:“非粘性的”。使用这个返回值时,若是在执行完onStartCommand后,服务被异常kill掉,系统不会自动重启该服务。
    START_REDELIVER_INTENT:重传Intent。使用这个返回值时,若是在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。
START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,但不保证服务被kill后必定能重启。
固然也还有其余解决方案,可是或多或少都会出现一些弊端或者相对来讲比较麻烦。在这里举几个最多见的例子:
1.在onDestory方法中重启Service服务,通常来讲,这样作是能够的。可是若是这样----》设置-->下载-->强制中止。则不会执行ondestory方法,或者经过别人应用,如360直接kill掉个人应用时,也是不会调用Service的ondestory方法的。
2.修改AndroidManifest.xml
<manifest  xmlns:android="http://schemas.android.com/apk/res/android"
        android:sharedUserId="android.uid.system">     
<application android:icon="@drawable/icon"
android:label="@string/app_name" android:allowClearUserData="false"
          android:process="system"  android:killAfterRestore="false">
若是在加入了此部分代码,表示该程序运行在system进程组中,system进程组是没有权限访问sd卡的,并且service是不会自动重启的。
3.提升service的优先级别,无论你service的优先级别有多高,用户都是能够手动杀死的.
等等还有其余不少种方式,这里就不一一列举了。

    因此若是要使本身的Service可以一直运行,最简单的方法就是重写onStartCommand方法就行了.可是千万不要作坏事,不要作被用户鄙视的恶意程序
相关文章
相关标签/搜索