Android 前台服务讲解

news2024/11/15 13:49:46

目录

Android 前台服务和后台服务区别

前台服务(Foreground Service):

后台服务(Background Service):

总结:

前台服务更新:

JobScheduler、WorkManager 区别和使用方式

android.app.ForegroundServiceStartNotAllowedException: Service.startForeground() 咋解决?

WorkManager


Android 前台服务和后台服务区别

在 Android 中,前台服务(Foreground Service)和后台服务(Background Service)是两种不同类型的服务,它们在功能和系统对待上有一些区别。

前台服务(Foreground Service):

官方文档 https://developer.android.com/guide/components/foreground-services

  • 前台服务是一种可见的服务,它会在状态栏显示一个通知,告知用户有一个正在运行的服务。

  • 前台服务在执行某些需要用户知晓或与用户交互的任务时非常有用,例如播放音乐、下载文件等。

  • 前台服务被认为是用户体验的一部分,因此系统会给予其更高的优先级,不易被系统终止。

  • 使用前台服务时,需要调用 startForeground() 方法启动服务,并提供一个与服务相关的通知。

  • 当您使用前台服务时,必须显示通知,以便用户主动了解该服务正在运行。除非服务停止或从前台删除,否则无法关闭此通知。

后台服务(Background Service):

官方文档 https://developer.android.com/guide/background#categories_of_background_tasks

  • 后台服务是一种在后台执行任务的服务,用户不会直接感知其存在。

  • 后台服务通常用于执行不需要用户交互的长时间运行任务,例如数据同步、定期更新等。

  • 后台服务的优先级较低,系统可能会在资源紧张时终止其运行,以释放系统资源。

  • 使用后台服务时,通常调用 startService() 方法启动服务。

总结:

  • 前台服务适用于用户知晓和需要与用户交互的任务,系统对其优先级更高,通常用于长时间运行的任务。

  • 后台服务适用于不需要用户交互且无需用户感知的任务,系统对其优先级较低,可能会在资源紧张时终止其运行。

需要注意的是,从 Android 8.0(API 级别 26)开始,引入了后台服务限制,即后台服务在后台执行任务时受到了一些限制。在后台执行任务时,应使用适当的后台执行方式,例如使用 JobScheduler、WorkManager 或者前台服务来确保任务的执行和系统资源的合理利用。

前台服务更新:

从 Android 13(API 级别 33)开始,用户可以默认关闭与前台服务关联的通知。为此,用户在通知上执行滑动手势。传统上,除非前台服务停止或从前台删除,否则通知不会被忽略。

JobScheduler、WorkManager 区别和使用方式

JobScheduler和WorkManager是Android中用于调度和执行后台任务的两个不同的工具,它们具有一些区别和适用场景。

JobScheduler:

  • JobScheduler是Android提供的调度任务的系统服务,从Android 5.0(API级别21)开始引入。

  • JobScheduler使用灵活的条件和触发器机制来调度任务的执行。可以基于时间、设备空闲状态、网络连接状态等条件来触发任务。

  • JobScheduler适用于需要延迟执行或周期性执行的后台任务,例如同步数据、更新操作等。

  • JobScheduler具有更低的功耗和资源消耗,系统会根据条件自动决定何时执行任务,以节省电量和系统资源。

使用JobScheduler的示例:

// 创建JobInfo对象
JobInfo jobInfo = new JobInfo.Builder(JOB_ID, new ComponentName(context, YourJobService.class))
        .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
        .setRequiresCharging(true)
        .build();

// 获取JobScheduler
JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);

// 调度任务
jobScheduler.schedule(jobInfo);

WorkManager:

  • WorkManager是Android Jetpack组件之一,用于执行可延迟、可靠和灵活的后台任务,从Android 5.0(API级别21)及以上版本可用。

  • WorkManager提供了一种简单且强大的方式来处理后台任务,包括延迟执行、周期性执行、设备闲置时执行等。

  • WorkManager在不同版本的Android上提供一致的行为,自动适应系统和设备的要求。

  • WorkManager适用于需要可靠执行和保证任务完成的后台任务,例如上传文件、发送通知等。

使用WorkManager的示例:

// 创建OneTimeWorkRequest对象
OneTimeWorkRequest workRequest = new OneTimeWorkRequest.Builder(YourWorker.class)
        .setConstraints(new Constraints.Builder()
                .setRequiredNetworkType(NetworkType.UNMETERED)
                .setRequiresCharging(true)
                .build())
        .build();

// 调度任务
WorkManager.getInstance(context).enqueue(workRequest);

总结:

  • 如果你需要灵活的任务调度机制,并且在Android 5.0及以上版本上使用,可以选择JobScheduler。

  • 如果你需要一种可靠的、跨版本的后台任务执行方式,并且使用Android Jetpack组件,可以选择WorkManager。

  • 对于Android 5.0以下的设备,你可以根据需要选择适合的方式,例如使用AlarmManager或自定义的后台服务。

需要根据你的具体需求、目标版本和功能特性来选择合适的后台任务调度工具。

android.app.ForegroundServiceStartNotAllowedException: Service.startForeground() 咋解决?

在 Android 12+ 上,要在后台启动前台服务,需要满足一些额外的条件,例如应用必须具有合适的权限或者是使用合适的 API 来请求前台服务的启动。如果不满足这些条件,就会抛出 ForegroundServiceStartNotAllowedException 异常。

解决这个异常的方法是考虑使用适当的后台任务调度方式,如使用 WorkManager 来替代前台服务。WorkManager 提供了一种可靠的后台任务执行机制,能够适应 Android 5.0(API 级别 21)及以上版本,并且避免了后台服务限制的问题。


WorkManager

官方文档 https://developer.android.com/guide/background#categories_of_background_tasks

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/731650.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python encode()函数详解,Python编码解码

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:小白零基础《Python入门到精通》 encode 1、常见编码格式2、返回的是Bytes类型3、错误处理方式4、解码 encode() 可…

5道Mysql面试题

1.什么Mysql的事务?事务的四大特性? Mysql中事务的隔离级别分为四大等级:读未提交(READ UNCOMMITTED)、读提交 (READ COMMITTED)、可重复读 (REPEATABLE READ)、串行化 …

TensorBoard 没有数据

版本 TensorBoard 2.13.0 报错: 打开projector_plugin.py 42行 from tensorboard.compat import notf # noqa: F401 修改为: from tensorboard.compat import tensorflow_stub as tf

Petrozavodsk Winter 2023. Day 1 部分题解

前言:整场的题目质量比较高,虽然之前做过一部分题,但还是被薄纱了 Changing the Sequences 大意: 给定两个数组a,b,长度都为n,元素都介于1-m之间 定义一次操作如下: 构造一个1-m的排列p&…

B - Colorful Stamp

#include<iostream> #include<algorithm> #include<vector> #include<bitset> #include<cmath> #include<set> #include<climits> #include<queue> #include<cstring>//memset头文件 using i64 int64_t; using namespa…

Spring Boot中的会话管理是什么,如何使用

Spring Boot中的会话管理是什么&#xff0c;如何使用 在Web应用程序中&#xff0c;会话是一种存储用户状态信息的机制。Spring Boot提供了会话管理的支持&#xff0c;使得在开发Web应用程序时可以轻松地管理用户的会话信息。本文将介绍Spring Boot中的会话管理是什么以及如何使…

ARM day9 (按键中断控制led亮灭)

key.h #ifndef __KEY_H__ #define __KEY_H__#include "stm32mp1xx_gpio.h" #include "stm32mp1xx_rcc.h" #include "stm32mp1xx_uart.h" #include "stm32mp1xx_exti.h" #include "stm32mp1xx_gic.h"//事件号 #define EXTI_…

特征选择算法 | Matlab实现基于ReliefF特征选择算法的分类数据特征选择 ReliefF

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 特征选择算法 | Matlab实现基于ReliefF特征选择算法的分类数据特征选择 ReliefF 部分源码 %--------------------

机器学习基础之《特征工程(2)—特征工程介绍、特征抽取》

一、什么是特征工程 机器学习领域的大神Andrew Ng(吴恩达)老师说“Coming up with features is difficult, time-consuming, requires expert knowledge. “Applied machine learning” is basically feature engineering. ” 注&#xff1a;业界广泛流传&#xff1a;数据和特…

看完这篇 教你玩转渗透测试靶机Vulnhub——Hackable: III

Vulnhub靶机hackableII渗透测试详解 Vulnhub靶机介绍&#xff1a;Vulnhub靶机下载&#xff1a;Vulnhub靶机安装&#xff1a;Vulnhub靶机漏洞详解&#xff1a;①&#xff1a;信息收集&#xff1a;②&#xff1a;端口敲门&#xff1a;③&#xff1a;SSH暴力破解&#xff1a;④&am…

java入门概念个人理解之package与import浅析

java入门概念个人理解之package与import浅析 由于近来学习java&#xff0c;遇到了一些在c上没有的概念&#xff0c;将它记http://录下&#xff0c;以自己复习使用&#xff0c;如有不理解妥之处&#xff0c;望大家批评指导。资料均由网上经过自己整合理解而来&#xff0c;如有侵…

Permission denied (publickey,password)问题的解决办法

[15:29:00.146] Terminal shell path: C:\WINDOWS\System32\cmd.exe [15:29:01.703] > root59.110.21.45: Permission denied (publickey,password). 解决&#xff1a; RSA key 登录方法/home/user/ 目录下建立 .ssh/ 文件夹 cd ~/ mkdir .ssh # 注意.ssh文件夹的权限 ch…

STM32+PWM+输入捕获测频

外部时钟&#xff0c;主频64M 定时器1 通道1发出PWM波 频率1K 定时器2 通道1输入捕获&#xff0c;上升沿触发 串口 /* USER CODE BEGIN 0 */ uint32_t time_up_num0;//上升沿计数 float time_frequency;//频率 /* USER CODE END 0 */ 初始换打开定时器 /* USER CODE BEGIN 2 …

ubuntu系统字体太小调整方法,亲测有效,2分钟解决!

背景&#xff1a;我们在ubuntu系统下写程序时&#xff0c;文件夹及文档的字体太小&#xff0c;看起来很累眼&#xff0c;现将字体调大方法记录如下&#xff0c;只需2分钟即可解决&#xff01;&#xff01; 1、打开终端&#xff0c;安装gnome-tweaks sudo apt install gnome-t…

express框架使用express-generator工具

1.全局安装 npm install -g express-generator 2.检测是否安装成功 express -h 3. 快速创建Express应用程序的工具 express -e express-generator 说明&#xff1a;express-e和express-generator都是用于快速创建Express应用程序的工具。express-e是一个命令行工具&#xff0…

基于深度学习的高精度球场足球检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度球场足球检测识别系统可用于日常生活中或野外来检测与定位球场足球目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的球场足球目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5…

什么是操作系统

操作系统&#xff08;Operating System&#xff09; 什么是操作系统 操作系统是一组做计算机资源管理的软件的统称。目前常见的操作系统有&#xff1a;Windows系列、Unix系列、Linux系列、OSX系列、Android系列、iOS系列、鸿蒙等 操作系统的定位 操作系统的基本功能 操作系统由…

【报告】从GLM-130B到ChatGLM:大模型预训练与微调学习记录

本文主要是记录《【报告】从GLM-130B到ChatGLM&#xff1a;大模型预训练与微调》此次讲座的汇报内容&#xff0c;如有不适请联系删除即可&#xff0c;总结记录内容纯粹为了后面学习使用方便&#xff0c;文档性质的资料还是要比看视频更加方便的。

将Json结构展平

前言 技术群里面一个哥们在群里提了一个问题&#xff0c;怎么把Json的树形结构展平成一层 在线Json格式化工具 将这个JSON 展平成这样 代码 使用方法 static void Main(string[] args) {//将测试对象转换成测试Jsonvar json JsonConvert.SerializeObject(new{Id 1,Name …

【数据分析 - 基础入门之NumPy⑤】NumPy基本操作 - 二

知识目录 前言一、聚合函数二、矩阵操作2.1 算术运算2.2 线性代数2.3 其他数学操作 三、广播机制3.1 广播的原则3.2 案例 四、排序五、文件操作结语相关导读 前言 大家好&#xff01;本期给大家带来的是【数据分析 - 基础入门之NumPy⑤】NumPy基本操作 - 二&#xff0c;收录于…