android--Service自动重启而不被kill掉的一些方法

 

android--Service自动重启而不被kill掉的一些方法

标签: android server
  2213人阅读  评论(0)  收藏  举报
  分类:

1.最好的方法是重写serviceonStartCommand方法

@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 后一定能重启。


下面的方法或多或少都会出现一些弊端或者相对来说比较麻烦,如:

2.在onDestory方法中重启Service服务(startService),一般来说,这样做是可以的。但是如果这样----》设置-->下载-->强制停止。则不会执行ondestory方法,或者通过别人应用,如360直接kill掉我的应用时,也是不会调用Serviceondestory方法的。

3.修改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 是不会自动重启的。

4.提高service的优先级别,但是不管你service的优先级别有多高,用户都是可以手动杀死的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值