文档章节

如何让Service自动重启而不被kill掉

DannyCoder
 DannyCoder
发布于 2017/05/06 14:34
字数 665
阅读 33
收藏 0

如何让Service自动重启而不被kill掉

 

重写service的onStartCommand方法。
@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后一定能重启。
当然也还有其他解决方案,但是或多或少都会出现一些弊端或者相对来说比较麻烦。在这里举几个最常见的例子:
1.在onDestory方法中重启Service服务,一般来说,这样做是可以的。但是如果这样----》设置-->下载-->强制停止。则不会执行ondestory方法,或者通过别人应用,如360直接kill掉我的应用时,也是不会调用Service的ondestory方法的。
2.修改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是不会自动重启的。
3.提高service的优先级别,不管你service的优先级别有多高,用户都是可以手动杀死的.
等等还有其他很多种方式,这里就不一一列举了。

    所以如果要使自己的Service能够一直运行,最简单的方法就是重写onStartCommand方法就好了.但是千万不要做坏事,不要做被用户鄙视的恶意程序

本文转载自:

共有 人打赏支持
DannyCoder
粉丝 2
博文 43
码字总数 18830
作品 0
广州
程序员
android如何让service不被杀死-提高进程优先级

1.在service中重写下面的方法,这个方法有三个返回值, STARTSTICKY是service被kill掉后自动重写创建 [代码]java代码: @Override public int onStartCommand(Intent intent, int flags, in...

蜗牛TT
2013/08/13
0
0
android如何让service不被杀死-提高进程优先级

1.在service中重写下面的方法,这个方法有三个返回值, START_STICKY是service被kill掉后自动重写创建 [代码]java代码: @Override public int onStartCommand(Intent intent, int flags, in...

雨焰
2013/07/24
0
1
Service里面的onStartCommand()方法详解

启动service的时候,onCreate方法只有第一次会调用,onStartCommand和onStart每次都被调用。onStartCommand会告诉系统如何重启服务,如判断是否异常终止后重新启动,在何种情况下异常终止 on...

程序袁_绪龙
2014/12/09
0
0
Android Service生命周期 Service里面的onStartCommand()方法详解

Android Service生命周期 Service里面的onStartCommand()方法详解 在Demo上,Start一个Service之后,执行顺序:onCreate - > onStartCommand 然后关闭应用,会重新执行上面两步。 但是把代码...

Angels_安杰
2016/02/24
33
0
Android中Service类onStartCommand

Android开发的过程中,每次调用startService(Intent)的时候,都会调用该Service对象的onStartCommand(Intent,int,int)方法,然后在onStartCommand方法中做一些处理。然后我们注意到这个函数有...

程序袁_绪龙
2014/12/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

idea新建springCloud项目(5)- 订单服务

1.创建订单api,如下: 2.创建订单实现逻辑 3.新建订单、订单商品表 -- 订单 create table `order_master` ( `order_id` varchar(32) not null, `buyer_name` varchar(32) not null comment......

monroeCode
17分钟前
1
1
游戏开发经验谈(二):对战类全球服游戏的设计与实现

上篇文章《游戏开发经验谈(一):游戏架构里隐藏的五个坑及其应对方案》,我们主要讲解了游戏架构设计当中隐藏的一些坑及其应对方案,错过的小伙伴可以回溯之前的内容。本期内容,将会重点介...

UCloudTech
27分钟前
0
0
Mysql基本语法

一.联合主键 drop table CONTENT_AND_CATALOG;CREATE TABLE `tobebetter`.`CONTENT_AND_CATALOG` ( `ID` VARCHAR(120) NOT NULL , `CONTENT_ID` VARCHAR(120) , `CA......

我是菜鸟我骄傲
28分钟前
0
0
179. centos7 安装mariadb

1. centos7 中安装mariadb 1.1 执行安装 centos7 自带了mariadb yum -y install mariadb mariadb-server 1.2 启动mariadb systemctl start mariadb 1.3 设置开机启动 systemctl enable maria......

Lucky_Me
35分钟前
0
0
【AI实战】动手训练自己的目标检测模型(YOLO篇)

在前面的文章中,已经介绍了基于SSD使用自己的数据训练目标检测模型(见文章:手把手教你训练自己的目标检测模型),本文将基于另一个目标检测模型YOLO,介绍如何使用自己的数据进行训练。 ...

雪饼
42分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部