Android后台应用开启前台服务---android8到android12梳理

article/2025/10/8 4:32:23

以下内容都是针对start方式启动的service,而非bind启动的srevice。因为bind启动的服务生命周期始于Activity绑定在一起的,会随Activity的销毁而停止。但start方式启动的service独立的,即使应用销毁它也可以继续运行,故Android系统会随版本升高逐渐限制后台应用start开启的服务。
在这里插入图片描述

1、Android 8.0 异常报错

在Android 8.0 系统中,处于后台的应用想要开启前台服务,必须满足两点:

  1. 在Activity中调用startForegroundService()方法
  2. 所调起的Service必须执行startForeground(int id, Notification notification)方法,发送一个通知展示给用户看,告诉用户自己在站着资源。若不发通知则会ARN + Crash套餐。

【异常1】IllegalStateException: Not allowed to start service Intent

【产生原因】后台应用开启服务时,使用的startService()方法,而非startForegroundService()方法
【解决方案】后台应用开启服务时使用startForegroundService()方法

【异常2】RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground()

【产生原因】后台应用调用了startForegroundService()方法,但是调起的Service没有调用startForeground(int id, Notification notification)发送前台通知
【解决方案】调起的服务要调用startForeground(int id, Notification notification)方法发送前台通知

注意:startForeground(int id, Notification notification)中的id不可为0,否则也会发生Crash

2、Android 12.0 异常报错

【异常】ForegroundServiceStartNotAllowedException

【产生原因】Android 12.0及以上,禁止后台应用开启前台服务(特殊情况除外)
【解决方案】使用WorkManager代替。官方说明

标题Android 12.0 中允许后台应用开启前台服务的特殊情况

在这里插入图片描述

以上是根据官方文档总结而得,但实际编码中发现,Android 8.0以上,后台应用开启前台服务时,只要startForeground(),startForeground()就不会ANR+Crash

参考文档
android8.0后台服务

JobScheduler
JobScheduler

ANR

android12 后台服务
android12后台服务-官方文档


http://chatgpt.dhexx.cn/article/89Z7Y7AW.shtml

相关文章

关闭后台App刷新后台应用刷新是做什么的

官方解释 “后台应用刷新” 是什么作用(如图) 关闭后台应用刷新,并不会影响到消息接收(因为消息接收是通过Apple Push Notification机制来的)省电模式默认全部应用都关闭刷新(说明关闭可以省电&#xff09…

Android——后台服务

Android应用编程实验 实验名称:Android 后台服务 实验目的:通过Service设计后台服务程序,通过Broadcast实现信息广播机制 实验内容: 设计一个简单的后台音乐服务程序;设计一个简单的信息广播程序示例;利用B…

Android应用后台网络管控机制

应用后台网络管控机制 概述 在维护手管应用时,经常遇到与应用后台网络控制相关的问题,在解决这些问题的过程中,学习了下应用后台网络控制的流程以及一些日志的分析方法,现在把它总结一下,方便自己以及他人的学习。 网…

Android将后台应用唤起到前台的方法

在我们开发的过程中,经常遇到app进入后台,或者切换到前台的情况。 比如: 从后台切换到前台显示全屏广告实践来电显示从后台切换到前台 如图显示:压后台10秒钟,自动弹出 实现主要分为两个步骤: 第一步通…

后台功能

#🌌 后台功能 后台功能模块,包含主控面板,开发管理,日志管理,系统监控,通知公告,文件管理,定时任务。 #1. 主控面饭 主控面板展示了系统的一些统计信息,采用默认的ant…

如何让应用保持后台运行,做到保活?

其实,我们无法做到真正意义上的保活,应为系统进程会自动杀死占用过大内存的某个应用。 但我们还有一种选择,就是过滤该应用的包名,做到后台任务键清理不掉它,单独去除不掉它,只有返回键才能做到真正的退出…

【已解决】Android 如何让应用在后台运行

应用在后台跑,这种说法可能不够准确,就是说应用没有finish退出,但也不在前台的状态,例如应用执行中点击了home键一样。如何实现呢? 要点: 退回后台是执行了home键,activity分别执行了onPause和…

如何让安卓APP一直在后台运行?

本文摘自微信公众号“android高心星的私塾” 一 声明 1 网上很多的保活手段,但是不靠谱的居多 2 本文只是进行保活知识的推广,不是在教你做永生不死的进程 二 保活手段 1 业界保活手段:黑色保活,灰色保活,白色保活 2…

Android | 判断App处于前台还是后台的方案

很多场景下,都需要判断某个App处于前台还是后台。本文集网上编写的前台判断方案于一体。 目前,有6种方案: 方 法 判断原理需要权限可以判断其他应用位于前台特点①RunningTask否Andorid4.0系列可以,5.0以上机器不行Android5.0此方…

fastapi_No.18_后台应用

文章目录 简介使用场景 创建后台应用步骤第一步:定义后台应用函数第二步:使用后台应用函数 在依赖项中的后台应用示例代码示例代码说明 简介 后台应用就是在发送响应后运行的函数。通常用在请求后需要耗费较长时间处理,且客户端不需要在接收…

win11如何禁用后台应用权限 Windows11禁用后台应用权限的设置方法

我在使用Win11系统的电脑时经常会遇到自动打开应用程序情况,很多小伙伴都不知道到如何关闭,那么遇到这种情况应该要如何解决呢?下面就和小编一起来看看Win11系统要如何去禁用软件的后台权限吧。更多windows11系统教程,可以参考小白一键重装网…

提高软件CPU占用率

案例: 独立线程以5ms一包的速率接收指令(一共大概70-80种指令类型),并放入一个队列A 主线程中,根据定时器去队列A中取数据,并解析/计算/显示(速率:200包/秒) 现象&…

CPU使用率100%,如何解决

文章目录 CPU使用率概念CPU使用率的重要指标计算公式 查看CPU使用率CPU 使用率过高总结 CPU使用率 概念 单位时间内CPU使用情况的统计,以百分比方式显示 Linux是一个多任务操作系统,将每个CPU的时间划分为很短的时间片,通过调度器轮流分配…

解决 服务器cpu使用率100%,变成矿鸡之我与病毒crypto斗智斗勇,宝塔面板cpu使用率100%爆红

关于 简单解决宝塔面板显示CPU使用率 100%,但top却没找到相关进程这件事!!! 如图: 作为一个小白,我只是想简单的搭建一个个人网站,结果碰到这个闹心的事。 服务器: 阿里云服务器 面板&#xff…

linux的mysql占用cpu过高_关于在Linux环境下,Mysql占用CPU使用率100%的优化

今天使用 MobaXterml 连接上一台物联网的Linux服务器的使用,发现该服务器的CPU使用率一直在100%左右。 使用top 命令发现Mysql占用了大量的CPU 用数据库工具 Navicat premium 以 root 的身份连接数据库,执行查询语句: show PROCESSLIST; 发现…

CPU使用率到100%,有哪些因素影响?

关注星标公众号,不错过精彩内容 转自 | 涛哥依旧 最近,一位同事急匆匆跑过来跟我说:糟糕了,服务器CPU的使用率达100%了。 我心想不可能啊,CPU有那么多核,怎会跑满?于是看了一眼,结果…

记一次golang cpu 占用100%

最近重新部署了下测试服务器,发现其负载达到了4.*, cpu 使用率达到了100%,吓的瑟瑟发抖,马上起来查看情况。 1, 想到了使用go性能查看工具: pprof,因为项目是用gin开发的,所在直接安…

Mysql CPU占用100%查询

这几天每天都会收到服务器负载报警,抽出时间查看一下原因。 进入到服务器使用top命令查看: 能够看到是mysql常年霸居榜首,导致服务器负载变高。理论上来讲,数据量没有那么大,因为很多数据都是没用的,前一段…

【故障排查】如何排查CPU占用100%

线上后台报警CPU占用100%,CPU占用过高,本文介绍一下如何排查CPU占用过高原因。 步骤1. top 输入top命令,找到占用CPU最高的进程。按ShiftP键排序: 可以看到CPU占用最高的pid是92129。 步骤2. top -Hp pid 查看指定进程内线程信…

vmware虚拟机WinXp sp3的系统cpu占用100%的解决方案

0x00 问题场景 1. 环境配置 角色版本位数备注虚拟机软件VMware Workstation15\原始版本12,升到15Host OSWindows 7 Professional6.1.7601, Service Pack 164-bit\Guest OSWindows XPservice Pack 332 bit\ 2. 环境说明 VMware在很久以前是version12,…