我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android 前台服务讲解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android 前台服务讲解

目录

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

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

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

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

  • 使用后台服务时,通常调用 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();// 获取JobSchedulerJobScheduler 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

 

来源地址:https://blog.csdn.net/zyy_give/article/details/131602476

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android 前台服务讲解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android启动前台服务(startForegroundService)

问题: APP in background in null uid AndroidRuntime: android.app.RemoteServiceException: Context.startForegroundService() d
2023-08-20

Android实现Service在前台运行服务

前言在做手机音乐播放器的时候,让我非常苦恼的一件事就是手机有清理内存的软件,比如百度,360等等,一点击清理音乐就停止播放了,去后台查看发现Service已经被停止并重新启动了,这显然不是我想要的,我希望音乐能够在后台播放,并且自己能控制什
2023-05-30

Android入门教程 | 四大组件之Service(前台服务,后台服务)

Service是一种可在后台执行长时间运行操作而不提供界面的应用组件。服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行。 此外,组件可通过绑定到服务与之进行交互,甚至是执行进程间通信 (IPC)。 例如,服务可
Android入门教程 | 四大组件之Service(前台服务,后台服务)
2023-12-22

Android开发服务Service全面讲解

Android的服务是开发Android应用程序的重要组成部分。不同于活动Activity,服务是在后台运行,服务没有接口,生命周期也与活动Activity非常不同。通过使用服务我们可以实现一些后台操作,比如想从远程服务器加载一个网页等,下面来看看详细内容,需要的朋友可以参考下
2023-02-09

Android中Service(后台服务)详解

1.概念: (1).Service可以说是一个在后台运行的Activity。它不是一个单独的进程,它只需要应用告诉它要在后台做什么就可以了。 (2).它要是实现和用户的交互的话需要通过通知栏或者是通过发送广播,UI去接收显示。 (3)
2022-06-06

phpcms更换服务器后前台后台无法登录的解决方法

今天,有朋友说phpwww.cppcns.comcms网站搬家、更换IP后,前台www.cppcns.com和后台都无法登录,应朋友要求,处理pc换ip后无法登录,经过一个小时的忙活,终于看到成效啦,下面我就分享下自己是怎么解决的,希望可以
2022-06-12

云服务器讲解

云服务器可以提供以下功能:弹性计算能力:云服务器可以根据用户请求自动分配计算资源,从而避免了物理服务器的资源闲置和浪费。可靠性和稳定性:云服务器可以实现高可靠性和稳定性,避免了物理服务器故障导致的应用程序崩溃或数据丢失等问题。高性能:云服务器可以快速响应用户请求,提高应用程序的性能,减少应用程序的资源占用。安全性:云服务器采用安全的数据存储和传输方式,可以保障用户数据的安全性。可扩展性:云服务器可...
2023-10-27

Android中应用前后台切换监听的实现详解

前言最近在工作中遇到了这么一个需求:如何实现 Android 应用前后台切换的监听?下面来一起看看详细的介绍:iOS 内边是可以实现的,AppDelegate 给了一个回调监听:@UIApplicationMainclass AppDele
2023-05-31

怎么联系亚马逊前台服务器客服

在网站首页点击联系客服按钮,选择“电话客服”或“在线客服”,并按照提示操作。在网站页面上可以看到一个“联系我们”链接,点击该链接后,系统会引导您输入您的手机号码或电子邮件地址,以便接收客服人员的联系信息。输入手机号码或电子邮件地址后,系统会提示您输入验证码,以确认您的身份。输入验证码后,输入您的登录密码,并点击“登录”即可进入系统。进入系统后,可以看到一个“联系我们”的选项,点击该选项即
2023-10-27

云服务器架构讲解

云服务器是一种基于云技术的计算服务,它允许用户通过互联网访问、存储和处理大型数据集。在云服务器中,用户可以通过互联网连接到其上,无需拥有自己的服务器或数据中心。它提供了一系列的服务,包括负载均衡、容错、安全、故障转移和备份等。下面是云服务器架构的一些特点和优点。特点1:高可用性和可靠性云服务器通过高可用性和可靠性功能来保障其服务的可靠性和可用性。在云服务器上的应用程序需要在本地运行,而不是
2023-10-26

Android 后台调度任务与省电详解

I. Handler: 在进程存活的期间有效使用, Google官方推荐使用。简单易用。稳定高效。II. AlarmManager: 利用系统层级的闹钟服务(持有Wake lock)。 如果需要精确的定时任务,这个是最佳选择。1. 功能 在
2022-06-06

超详细讲解Linux DHCP服务

目录一、DHCP服务(动态主机配置协议)1.背景2.概述3.优点4.DHCP报文类型5.DHCP 的分配方式二、安装 DHCP 服务器1.DHCP 服务软件2.主配置文件三、配置步骤1.使用 DHCP 动态的给 PkHmtPjC 机分配 I
2022-06-04

Android中使用IntentService创建后台服务实例

IntentService提供了在单个后台线程运行操作的简单结构。这允许它操作耗时操作,而不影响UI响应。同样,IntentService也不影响UI生命周期事件,所以,它在某些可能关闭AsyncTask的情况下,仍会继续运行(实测在Act
2022-06-06

深入解析Android系统中应用程序前后台切换的实现要点

在介绍程序实现之前,我们先看下Android中Activities和Task的基础知识。 我们都知道,一个Activity 可以启动另一个Activity,即使这个Activity是定义在别一个应用程序里的,比如说,想要给用户展示一个地图的
2022-06-06

Android后台服务在屏幕休眠保持运行

Android App中的Service可以保持后台运行,比如音乐播放就是Service的典型应用,在开发移动APP时,很多业务场景需要用到Service保持在后台运行,在实现过程中让Service在屏幕休眠下继续保持运行,往往没有按照预期
2022-06-06

移植DHCP服务器到Android平台RK3399板子中

前言 现需要将RK3399板子能够将自身WIFI接收到的网络数据通过Ethernet网口分发出去,使其扩展成为像路由器一样的功能,并且可以自动分配IP给Client,做到自由上网。自动分配IP地址,则就想到了DHCP服务器的功能,但Andr
2022-06-06

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录