重写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方法就行了.可是千万不要作坏事,不要作被用户鄙视的恶意程序