如何保证Service在后台不被杀死?

2023-05-16

一、前期基础知识储备

(1)为什么要保证后台Service不被杀死

提高应用存在感。对于大厂的应用来说,其程序“活着”不是问题,但是为了带来更好的用户体验,提高用户粘性,就需要尽可能调用程序更多的服务,这样才能带来更多的用户体验(不一定更好,但是数量占优);对于小家来说,尽可能的让程序“活着”是它们的第一要务,通过后台服务的方式让应用存活在用户手机里也是一种存活的方式。

(2)后台Service真的可以不死吗

当然不行,任何应用的服务都是可以被杀死的,有系统直接杀死,也有用户直接杀死的,所以所谓保证Service不被杀死的实际含义——保证Service在杀死后可以立刻重启,称为“伪不死”状态。本篇文章总结了常见的5种保证“伪不死”的方法。

二、上代码,具体实现

修改onStartCommand(..)方法的返回值


通过对官方文档可知,修改onStartCommand(..)方法的返回值为START_STICKY可实现停止服务之后重启服务。

@Override
 public int onStartCommand(Intent intent, int flags, int startId){
  flags = START_STICKY;
  return super.onStartCommand(intent, flags, startId);
  // return START_REDELIVER_INTENT;
 }

提升service优先级

AndroidManifest.xml文件中对于intent-filter可以通过android:priority = "1000"这个属性设置最高优先级,1000是最高值,如果数字越小则优先级越低,同样适用于广播。

提升service进程优先级

Service尽管不依靠活动活着,但是依靠该应用的进程活着,如果应用进程关闭了,那么Service也要销毁,所以尽量提高Service依附的进程,也可以保证其生存状态。“前台可见进程服务于后台空进程”一共有6种进程,服务若想获得更长,可以设置为前台服务,依附于和用户交互的前台进程

onDestroy方法里重启service

 public void onDestroy(){
  Intent localIntent = new Intent();
  localIntent.setClass(this, MyService.class); // 销毁时重新启动Service
  this.startService(localIntent);
 }

Application加上Persistent属性:通过在androidmanifest.xml中的application标签中加入android:persistent="true" 属性后的确就能够达到保证该应用程序所在进程不会被LMK杀死。但有个前提就是应用程序必须是系统应用,也就是说应用程序不能采用通常的安装方式。必须将应用程序的apk包直接放到/system/app目录下。而且必须重启系统后才能生效。

小结:以上的方法实际上都只是做到了“伪不死”,并不会真的不死,用户手动强制停止,你一点办法都没有,所有的操作都是.in vain 所以做应用的人要在“实现服务”和“用户体验”之间,权衡清楚,毕竟任何应用的主人都是使用者。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何保证Service在后台不被杀死? 的相关文章

随机推荐

  • PyQt5--StatusBar

    1 coding utf 8 2 39 39 39 3 Created on Sep 13 2018 4 5 64 author SaShuangYiBing 6 39 39 39 7 import sys 8 from PyQt5 QtW
  • U-BOOT必知必备的一些知识(常用部分)

    1 首先u boot的是干啥的 启动linux系统的 要想启动linux系统 必须初始化跑linux的DDR 一般linux镜像存储在外置存储flash位置 2 u boot从哪里获取 uboot官网有 但是支持少 可以从soc厂商定制版的
  • 以Linux认识的方式写Linux驱动之字符设备驱动

    首先我们需要知道的是Linux内核干了什么我们不关心 xff0c 我们开发驱动程序 xff0c 只关心怎么才能让Linux认识我们的驱动 xff0c 当然 xff0c 对应的驱动也有对应的应用程序 xff0c 否则 xff0c 开发这个驱动
  • 关于linux的filp->private_data解释

    首先给出filp的结构体 xff1a struct file struct file union struct list head fu list 文件对象链表指针linux include linux list h struct rcu
  • 呐,这不就是你要的C++后台开发学习路线吗?

    校招形势 在去年结束的秋季招聘中 xff0c 后台开发或服务器开发的岗位需求一度火热 xff0c 甚至超过了算法岗 不少同学从诸神黄昏的算法岗战场上退下 xff0c 转向更偏向工程能力的后台开发岗 xff0c 从而造成后台开发岗位竞争的大爆
  • 了解这些C++常用库,或许能够帮你找到合适的个人项目!

    缺项目的校招同学 xff0c 或许可以从常用库或框架中寻找能够实现个人项目的题目 文 Amazing 图 Amazing 在求职的时候 xff0c 简历上项目会直接影响能否获得笔 面试机会 但是部分同学在书写简历的时候 xff0c 往往都觉
  • java 打包部署服务器时upd或tcp server接收不到网络调试助手的数据,出现问题的可能性

    这里以upd server端为例子 服务器中的upd接收不到本地网络调试助手发过去的可能大概有以下几种可能 1 网络调试助手中的ip 端口地址没有写好 最好是127 0 0 1 本地IP地址192 168 X X 或者外网地址都试一试 2
  • 9. 对象指针与对象数组

    一 对象指针 声明形式 xff1a 类名 对象指针名 Clock c 8 3 10 Clock ptr ptr 61 amp c 通过指针访问对象成员 xff08 一般类的属性都是封装起来的 xff0c 因此通常是通过指针访问成员函数 xf
  • 使用小觅相机标准入门版运行vins

    文章目录 运行步骤概括详细步骤第一步 xff1a 下载相机驱动并编译第二步 xff1a 下载源码并编译第三步 xff1a 更新源码中的配置文件3 1 获得相机与IMU参数3 2 xff1a 修改源代码的参数文件 第四步 xff1a 运行vi
  • Linux/Centos Mondo 一键部署、镜像恢复,快速部署

    一 简介 Mondo Rescue是一个开源免费的故障恢复和备份工具 xff0c 用户可以轻松地创建系统 xff08 Linux或Windows xff09 克隆或备份的ISO镜像 xff0c 可以将这些镜像存放在CD DVD 磁带 USB
  • 嵌入式实时操作系统uC/os-II(十四)-消息邮箱及其操作

    消息邮箱的定义 把数据缓冲区的指针赋给事件控制块成员 OSEventPtr xff0c 同时使事件控制块的成员 OSEventType 为常数 OS EVENT TYPE MBOX xff0c 则该事件控制块就叫做消息邮箱 消息邮箱的数据结
  • iOS Expected ';' after top level declarator

    项目中编译出现iOS Expected 39 39 after top level declarator 原因 xff1a 未导入UIKit框架 转载于 https www cnblogs com StevenHuSir p 1044602
  • 嵌入式实时操作系统uC/os-II(十四)-消息队列

    消息队列 消息队列由三部分组成 xff1a 事件控制块 消息队列 消息 当事件控制块成员 OSEventType 值为 OS OSEVENT TYPE Q 时 xff0c 该事件控制块代表一个消息队列 消息队列的数据结构如图 6 1所示 从
  • 嵌入式实时操作系统uC/os-II(十六)-信号量集

    信号量定义 uC OS II 提供了可处理多个信号量的信号量集 其实意图如图 7 1 所示 图 7 1 信号量集的示意图 从图中可以看到 xff0c 信号量实质上就是一个多输入 多输出的组合逻辑 其输入为其他任务发出的多个信号 xff0c
  • 基于深度学习的图像识别,实现APP自动打麻将

    互联网改变了我们的生活 xff0c 现在连打麻将都在网上打了 进几年发现身边的很多朋友都在网上玩一款四川麻将APP 平时没事的时候我也玩玩 xff0c 我是一个写了几年程序的码龙 xff0c 突然有一天我有个想法我能不能用我的专业来解放我的
  • PHP常用设计模式

    单例模式 单例模式顾名思义 xff0c 就是只有一个实例 作为对象的创建模式 xff0c 单例模式确保某一个类只有一个实例 xff0c 而且自行实例化并向整个系统提供这个实例 单例模式的特点 xff1a 三私一共 xff1a 1 私有的静态
  • 飞行控制器固件项目-对比介绍(Ardupilot、PX4、LibrePilot、OpenPilot)

    ArduPilot与Pixhawk什么关系 https zhuanlan zhihu com p 109639638 无人机开源项目 8个开源无人机项目 https blog csdn net cuml0912 article detail
  • 各种控制方法在抗干扰方面的区别

    一 由来 自适应控制 AdaptiveControl AC xff1a AC旨在处理由结构参数扰动引起的不良影响 AC的思想是首先在线识别受控系统的模型参数 xff0c 然后根据识别的模型参数调整控制参数以获得良好的性能 AC在处理模型参数
  • 【深入理解】export和module.export的区别

    内部原理 exports 61 module exports 61 exports 是module exports的引用 xff0c 怎么理解这句话呢 xff1f 大概就是 var a 61 var b 61 a a 和 b 之间的区别吧
  • 如何保证Service在后台不被杀死?

    一 前期基础知识储备 xff08 1 xff09 为什么要保证后台Service不被杀死 xff1f 提高应用存在感 对于大厂的应用来说 xff0c 其程序 活着 不是问题 xff0c 但是为了带来更好的用户体验 xff0c 提高用户粘性