首页 > 代码库 > Android实现Service永久驻留
Android实现Service永久驻留
说实话,这是一种流氓行为。但有些时候又是不得不需要的。比如微信的NotifyReceiver。现在抛开这些伦理的东西不讲,我们只是来看看技术上怎么实现。在后台运行的service有几个途径可以将其停止运行,第一种就是软件退出;第二种就是通过系统强制停止运行;第三种就是被某些安全软件杀死。这里我们重点关注后两种永久驻留的实现。思路有一下几个:1.通过系统的某些动作来重启Service;2.在Service的onDestory()通过一系列操作重启Service。
先看第一种,最常见系统动作就是系统解锁动作。当系统解锁时,会发送一个广播(ACTION_USER_PRESENT)。广播接收器收到这个广播后会启动Service。具体的实现如下面代码所示:
1 public class BootBroadCastReceiver extends BroadcastReceiver { 2 3 public BootBroadCastReceiver() { 4 } 5 6 @Override 7 public void onReceive(Context context, Intent intent) { 8 if(Intent.ACTION_USER_PRESENT.equals(intent.getAction())){ 9 Log.d("PRESENT","received");10 Intent nIntent=new Intent();11 nIntent.setClass(context, RunningService.class);12 context.startService(nIntent);13 }14 }15 }
这里收到系统解锁的广播信息(ACTION_USER_PRESENT)后,会通过Intent的方式启动Service。Service的代码如下:
1 public class RunningService extends Service { 2 3 public RunningService() { 4 } 5 6 @Override 7 public IBinder onBind(Intent arg0) { 8 return null; 9 }10 @Override11 public void onCreate() {12 super.onCreate();13 }14 @Override15 public void onStart(Intent intent, int startId) {16 super.onStart(intent, startId);17 Log.d("start","start");18 }19 @Override20 public boolean onUnbind(Intent intent) {21 return super.onUnbind(intent);22 }23 @Override24 public void onDestroy() {25 super.onDestroy();26 Intent intent=new Intent();27 intent.setAction("restartService");28 RunningService.this.sendBroadcast(intent);29 }30 31 }
第二种方式就是在Service的OnDestory()方法中,发送一个广播信息,表示该Service将要被关闭,通过广播接收器接收到后重启Service,部分代码在上面的onDestory()中已经给出。下面给出广播接收器的代码:
1 public class ServiceDestoryBroadCastReceiver extends BroadcastReceiver { 2 3 public ServiceDestoryBroadCastReceiver() { 4 // TODO Auto-generated constructor stub 5 } 6 7 @Override 8 public void onReceive(Context context, Intent intent) { 9 if(intent.getAction().equals("restartService")){10 Intent nIntent=new Intent();11 nIntent.setClass(context, RunningService.class);12 context.startService(nIntent);13 }14 }15 16 }
该广播接收器收到“restartService”的广播后,会重亲启动Service,这样便保证了Service的驻留。
这两种方法我都已经自己做过验证。尤其是第二种,当我们在系统中点击强制停止该Service后,Service能够自动重启。被安全软件杀死后是否能够重启没有做过实验。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。