Android实现Service重启的方法

   本文实例讲述了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,顺带贴下手机开机发送的广播。

  ?

1
2
3
4
5
6
7
8
9
10
11

<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>

  ?

1
2
3
4
5
6
7
8
9

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程序设计有所帮助。

时间: 2024-08-20 04:49:54

Android实现Service重启的方法的相关文章

Android提高Service优先级的方法分析_Android

本文实例讲述了Android提高Service优先级的方法.分享给大家供大家参考,具体如下: Android 系统对于内存管理有自己的一套方法,为了保障系统有序稳定的运信,系统内部会自动分配,控制程序的内存使用.当系统觉得当前的资源非常有限的时候,为了保 证一些优先级高的程序能运行,就会杀掉一些他认为不重要的程序或者服务来释放内存.这样就能保证真正对用户有用的程序仍然再运行.如果你的 Service 碰上了这种情况,多半会先被杀掉.但如果你增加 Service 的优先级就能让他多留一会,我们可以

Android提高Service优先级的方法分析

本文实例讲述了Android提高Service优先级的方法.分享给大家供大家参考,具体如下: Android 系统对于内存管理有自己的一套方法,为了保障系统有序稳定的运信,系统内部会自动分配,控制程序的内存使用.当系统觉得当前的资源非常有限的时候,为了保 证一些优先级高的程序能运行,就会杀掉一些他认为不重要的程序或者服务来释放内存.这样就能保证真正对用户有用的程序仍然再运行.如果你的 Service 碰上了这种情况,多半会先被杀掉.但如果你增加 Service 的优先级就能让他多留一会,我们可以

我的Android进阶之旅------&amp;gt;android中service的onStartCommand()方法中intent为null的问题

       今天在维护公司的一个APP的时候,突然爆了空指针异常, Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.content.Intent.getBooleanExtra(java.lang.String, boolean)' on a null object reference        下面是报错的log. D/AndroidRuntime(

Android实现关机重启的方法分享_Android

实现系统重启的APK需要system的权限,在AndroidManifest.xml中增加android:sharedUserId="android.uid.system",再修改签名即可: 具体方法参考: 点击打开链接 1.使用PowerManager来实现:代码: 复制代码 代码如下: private void rebootSystem(){      PowerManager pManager=(PowerManager) getSystemService(Context.POW

Android实现关机重启的方法分享

实现系统重启的APK需要system的权限,在AndroidManifest.xml中增加android:sharedUserId="android.uid.system",再修改签名即可: 具体方法参考: 点击打开链接 1.使用PowerManager来实现:代码:复制代码 代码如下:private void rebootSystem(){      PowerManager pManager=(PowerManager) getSystemService(Context.POWER

详解Android中Service服务的基础知识及编写方法_Android

首先,让我们确认下什么是service?         service就是android系统中的服务,它有这么几个特点:它无法与用户直接进行交互.它必须由用户或者其他程序显式的启动.它的优先级比较高,它比处于前台的应用优先级低,但是比后台的其他应用优先级高,这就决定了当系统因为缺少内存而销毁某些没被利用的资源时,它被销毁的概率很小哦. 那么,什么时候,我们需要使用service呢?        我们知道,service是运行在后台的应用,对于用户来说失去了被关注的焦点.这就跟我们打开了音乐播

Android实现Service获取当前位置(GPS+基站)的方法_Android

本文实例讲述了Android实现Service获取当前位置(GPS+基站)的方法.分享给大家供大家参考.具体如下 需求详情 1).Service中每隔1秒执行一次定位操作(GPS+基站) 2).定位的结果实时显示在界面上(要求得到经度.纬度) 技术支持 1).获取经纬度 通过GPS+基站获取经纬度先通过GPS来获取如果为空改用基站进行获取–>GPS+基站(基站获取支持联通.电信.移动). 2).实时获取经纬度 为了达到实时获取经纬度需在后台启动获取经纬度的Service然后把经纬度数据通过广播发

android使用service和activity获取屏幕尺寸的方法_Android

本文实例讲述了android使用service和activity获取屏幕尺寸的方法.分享给大家供大家参考.具体实现方法如下: 1. activity: DisplayMetrics dm = new DisplayMetrics(); this.getWindowManager().getDefaultDisplay().getMetrics(dm); sW = dm.widthPixels; sH = dm.heightPixels; 2. service: DisplayMetrics dm

Android的Service应用程序组件基本编写方法_Android

Service是什么 Service是一个android 系统中的应用程序组件,它跟Activity的级别差不多,但是他没有图形化界面,不能自己运行,只能后台运行,并且可以和其他组件进行交互如更新ContentProvider,Intent以及系统的通知等等.其启动方式有两种:context.startService() 和 context.bindService().Service通常用来处理一些耗时比较长的操作. Service的编写 创建一个类(这里为FirstService)继承andr