Android实现Service重启的方法

作者:jayqean 时间:2021-10-01 09:25:25 

本文实例讲述了Android实现Service重启的方法。分享给大家供大家参考。具体如下:

做APP的时候,我们可能需要一个后台服务一直在运行着,得用到Service组件。

但服务可能在如下情况被杀死:

A.用户手动点击停止。
B.采用第三方软件(比如360手机卫士)进行清理,当然这样子除了系统服务外,其他的进程肯定也会被杀死,除非跟手机厂商联系。

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

我手机上装了一个卡卡司机助手,发现在B情况下,杀掉后,服务过段时间自动启动了,观察Log打印。

07-12 14:12:15.735: I/HadesLee(1456): Receiver,action=android.intent.action.USER_PRESENT 
07-12 14:12:15.745: I/HadesLee(1456): KakaService.onCreate.... 
07-12 14:12:15.745: I/HadesLee(1456): KakaService.onStartCommand,flags=2,startId=1 
07-12 14:12:15.755: I/ActivityManager(218): Start proc com.miui.weather2 for broadcast com.miui.weather2/.service.ServiceUpdateWeather: pid=1484 uid=10060 gids={3003} 
07-12 14:12:15.755: I/HadesLee(1456): nextRemindTime=null

看到此Log,发现它是收到android.intent.action.USER_PRESENT的广播后,进行服务的启动的。

android.intent.action.USER_PRESENT对应的手机屏幕的解锁,一般用户哪能有病没病的让手机一直在唤醒状态,所以我们可以通过接收此广播进行服务的重启,保持Service一直在后台运行。

在AndroidManifest.xml文件里注册该广播就OK,顺带贴下手机开机发送的广播。


<receiver android:name="com.agilemobi.comac.collect.android.services.UserPresentReceiver" >
 <intent-filter>
<action android:name="android.intent.action.USER_PRESENT" />
 </intent-filter>
</receiver>
<receiver android:name="com.agilemobi.comac.collect.android.services.BootReceiver" >
 <intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.HOME" />
 </intent-filter>
</receiver>

public class UserPresentReceiver extends BroadcastReceiver {
 private static final String TAG = "UserPresentReceiver";
 @Override
 public void onReceive(Context context, Intent intent) {
   // TODO Auto-generated method stub
   Log.e(TAG, "receive broadcast");
   // do something
 }
}

希望本文所述对大家的Android程序设计有所帮助。

标签:Android,Service
0
投稿

猜你喜欢

  • Java锁之自旋锁详解

    2022-12-12 21:38:36
  • Java开启JMX远程监控服务配置

    2021-11-02 01:14:43
  • Mybatis一对一延迟加载实现过程解析

    2022-09-07 12:45:43
  • Java编程Webservice指定超时时间代码详解

    2023-11-02 23:17:12
  • 基于JAVA中Jersey处理Http协议中的Multipart的详解

    2021-06-15 13:43:57
  • java内部类的定义与分类示例详解

    2022-07-01 20:16:47
  • 解决Mybatis映射文件mapper.xml中的注释问题

    2023-09-17 15:06:30
  • JAVA IDEA 打开assert 设置方式

    2022-08-19 13:48:49
  • java实现分页显示效果

    2021-12-29 20:17:43
  • 关于通过java调用datax,返回任务执行的方法

    2023-11-28 21:26:45
  • 关于java中构造函数的一些知识详解

    2023-11-27 22:09:11
  • Java编程用栈来求解汉诺塔问题的代码实例(非递归)

    2023-01-13 21:41:25
  • Spring Batch批处理框架使用解析

    2021-12-24 03:41:19
  • Java动态获取实现某个接口下所有的实现类对象集合

    2023-04-01 14:43:20
  • npoi2.0将datatable对象转换为excel2007示例

    2021-07-15 12:47:30
  • 如何解决springboot读取配置文件的中文乱码问题

    2022-09-13 22:26:42
  • .net的序列化与反序列化实例

    2022-12-29 00:50:50
  • 仅用5分钟极速入门Dubbo使用教程

    2022-08-08 12:08:55
  • 老生常谈Scanner的基本用法

    2021-08-27 00:34:18
  • SpringMVC请求流程源码解析

    2021-08-07 03:35:11
  • asp之家 软件编程 m.aspxhome.com