说实话,这是一种流氓行为。但有些时候又是不得不需要的。比如微信的NotifyReceiver。现在抛开这些伦理的东西不讲,我们只是来看看技术上怎么实现。在后台运行的service有几个途径可以将其停止运行,第一种就是软件退出;第二种就是通过系统强制停止运行;第三种就是被某些安全软件杀死。这里我们重点关注后两种永久驻留的实现。思路有一下几个:1.通过系统的某些动作来重启Service;2.在Service的onDestory()通过一系列操作重启Service。

先看第一种,最常见系统动作就是系统解锁动作。当系统解锁时,会发送一个广播(ACTION_USER_PRESENT)。广播接收器收到这个广播后会启动Service。具体的实现如下面代码所示:

1 public class BootBroadCastReceiver extendsBroadcastReceiver {2

3 publicBootBroadCastReceiver() {4 }5

6 @Override7 public voidonReceive(Context context, Intent intent) {8 if(Intent.ACTION_USER_PRESENT.equals(intent.getAction())){9 Log.d("PRESENT","received");10 Intent nIntent=newIntent();11 nIntent.setClass(context, RunningService.class);12 context.startService(nIntent);13 }14 }

15 }

这里收到系统解锁的广播信息(ACTION_USER_PRESENT)后,会通过Intent的方式启动Service。Service的代码如下:

1 public class RunningService extendsService {2

3 publicRunningService() {4 }5

6 @Override7 publicIBinder onBind(Intent arg0) {8 return null;9 }10 @Override11 public voidonCreate() {12 super.onCreate();13 }14 @Override15 public void onStart(Intent intent, intstartId) {16 super.onStart(intent, startId);17 Log.d("start","start");18 }19 @Override20 public booleanonUnbind(Intent intent) {21 return super.onUnbind(intent);22 }23 @Override24 public voidonDestroy() {25 super.onDestroy();26 Intent intent=newIntent();27 intent.setAction("restartService");28 RunningService.this.sendBroadcast(intent);29 }30

31 }

第二种方式就是在Service的OnDestory()方法中,发送一个广播信息,表示该Service将要被关闭,通过广播接收器接收到后重启Service,部分代码在上面的onDestory()中已经给出。下面给出广播接收器的代码:

1 public class ServiceDestoryBroadCastReceiver extendsBroadcastReceiver {2

3 publicServiceDestoryBroadCastReceiver() {4 //TODO Auto-generated constructor stub

5 }6

7 @Override8 public voidonReceive(Context context, Intent intent) {9 if(intent.getAction().equals("restartService")){10 Intent nIntent=newIntent();11 nIntent.setClass(context, RunningService.class);12 context.startService(nIntent);13 }14 }15

16 }

该广播接收器收到“restartService”的广播后,会重亲启动Service,这样便保证了Service的驻留。

这两种方法我都已经自己做过验证。尤其是第二种,当我们在系统中点击强制停止该Service后,Service能够自动重启。被安全软件杀死后是否能够重启没有做过实验。

原文:http://www.cnblogs.com/suneony/p/3925946.html

Android驻留广播,Android实现Service永久驻留相关推荐

  1. android 驻留广播,Android实现Service永久驻留

    说实话,这是一种流氓行为.但有些时候又是不得不需要的.比如微信的NotifyReceiver.现在抛开这些伦理的东西不讲,我们只是来看看技术上怎么实现.在后台运行的service有几个途径可以将其停止 ...

  2. android 屏蔽 广播,Android中使用BroadcastReceiver打开和关闭WIFI

    由于自动化测试需要,我们希望能够简单的控制Android手机的WIFI开和关,而不是通过UI操作的方式.由于每个Android机型的UI都千差万别,所以需要找到一个通用得方式来满足我们的需求. 最开始 ...

  3. android 受限广播,Android受限广播(protected

    在阅读Android源码Telephony模块时,发现在AndroidManifest.xml文件里声明了大量的protected-broadcast: 'android.intent.action. ...

  4. android 蓝牙 广播,android蓝牙BLE(三) —— 广播

    ​ 在蓝牙开发中,有些情况是不需要连接的,只要外设广播自己的数据即可,例如苹果的ibeacon.自Android 5.0更新蓝牙API后,手机可以作为外设广播数据. 广播包有两种: 广播包(Adver ...

  5. android 定位 广播,android - 如何触发广播接收器在GPS开启/关闭? - SO中文参考 - www.soinside.com...

    如何触发广播接收器在GPS开启/关闭? 问题描述 投票:35回答:5 public class BootReceiver extends BroadcastReceiver { @Override p ...

  6. android 音量 广播,Android平台音量调节(一)音量键调节音量

    Android平台音量调节 本文基于Android 8.0讲述Android平台原生音量控制功能. 流的定义 Android中,音量都是分开控制,各种流定义各种流的音量.在Android8.0中,定义 ...

  7. android 卸载 广播,Android利用系统广播---监听应用程序安装和卸载

    在android系统中,安装和卸载都会发送广播,当应用安装完成后系统会发android.intent.action.PACKAGE_ADDED广播.可以通过intent.getDataString() ...

  8. android耳机广播,Android利用广播实现耳机的线控

    [实例简介] 借助广播来实现单按钮耳机的线控,能够识别单击和双击 代码讲解在我的博客里: http://blog.csdn.net/illidantao/article/details/1684790 ...

  9. android alarmmanager 收不到广播,android定时闹钟:Service+BroadcastReceiver+AlarmManager+NotificationManager...

    在开发android的过程中,需要一个定时提醒的功能,原本以为是一个很简单的功能,但是发现网上能找到的讲解或者代码都很或多或少地缺少一部分的设置和关键代码,所以我才注册了简书账户,分享一下. 在研究的 ...

最新文章

  1. 无语!你竟然连CompletableFuture都不知道,还天天说在jdk8原地踏步~
  2. 网站收录慢的如“蜗牛”,是什么原因导致的?
  3. MongoRepository自定义条件及分页查询代码
  4. 钟国晨160809323 (作业9)
  5. struts2_模型驱动
  6. 数据结构实验之排序二:交换排序
  7. 通俗易懂的SpringBoot教程---day2---Springboot配置文件
  8. ansys转子动力学分析
  9. 4.19华为技术面+4.21华为主管面(已OC)
  10. word批量调整图片大小--宏
  11. 编码 unicode 及其在 javascript 中的使用
  12. 克里希纳穆提的作品!
  13. PHP基础学习(1)
  14. c语言围棋对弈程序设计,C语言围棋对弈程序设计(59页)-原创力文档
  15. 用金蝶kis录入数量初始数据的方法
  16. vue实现数字动态翻牌器
  17. Linux/Android——Input系统之frameworks层InputManagerService (六)【转】
  18. ThinkPad T14s 安装Ubuntu22踩坑记
  19. html5画布椭圆,在html5的Canvas上绘制椭圆的几种方法总结
  20. 保险行业公众号用户三步转化

热门文章

  1. 视觉灵感:30个漂亮的的网站设计
  2. Python 编程精选
  3. 怀旧魔兽最新服务器,魔兽怀旧服:这才是永久60服务器的现状,“真实且残酷”!...
  4. Compose 横竖屏切换时状态如何保存?rememberSaveable 实现原理分析
  5. 连接HBase的正确姿势
  6. winhex改宽高和伪加密
  7. Web前端期末大作业---新农村建设网页设计
  8. OpenWRT 教程 之 设置网络和无线
  9. 04.ARM-mini2440-内存管理单元(MMU)
  10. 无准考证号的四六级查询