Android 前台服务讲解

这篇具有很好参考价值的文章主要介绍了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#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

Android 前台服务讲解,android,前台服务,后台服务

 文章来源地址https://www.toymoban.com/news/detail-535410.html

到了这里,关于Android 前台服务讲解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android14前台服务适配指南

    Android 10引入了 android:foregroundServiceType 属性,用于帮助开发者更有目的地定义前台服务。这个属性在Android 14中被强制要求,必须指定适当的前台服务类型。以下是可选择的前台服务类型: camera : 相机应用。 connectedDevice : 与连接的设备相关的应用。 dataSync : 数据同步应用。

    2024年01月22日
    浏览(42)
  • Android启动前台服务(startForegroundService)

    问题: 注意事项: 8.0适配:通知需要加上NotificationChannel,开启前台服务的方式startForegroundService() 9.0适配:manifest.xml文件中需要增加权限:FOREGROUND_SERVICE Android之 Service服务详解 1、前台权限: 2、Service中开启通知: 3、启动Service: Android O对后台Service限制怎么解决 4、其他方

    2024年02月16日
    浏览(43)
  • Android app保活(前台服务)

    国内厂商定制,除非厂商给app白名单,否则只能用户手动添加白名单(应用自启和后台运行),才能通过前台服务实现app保活。 这里介绍前台服务相关实现方式。 开启服务: 服务: 清单文件

    2024年02月09日
    浏览(42)
  • Android service(服务)中的前台服务

    紧接上文 概述 前台服务是用户主动意识到的一种服务,因此在内存不足时,系统也不会考虑将其终止。前台服务必须为状态栏提供通知,将其放在运行中的标题下方。这意味着除非将服务停止或从前台移除,否则不能清除该通知。 针对上一篇文章中的案例我们可以发现,系

    2024年02月14日
    浏览(41)
  • Android进程类型及优先级(前台进程/可见进程/服务进程/缓存进程/空进程)

    Android 进程优先级 :前台进程 可见进程 服务进程 缓存进程 空进程 ; 关键优先级进程 : 活动进程 ; 高优先级进程 : 可见进程 , 服务进程 ; 低优先级进程 : 后台进程 , 空进程 ; Android 系统中会尽量保证优先级高的进程的存在时间尽可能长 ;如果资源不足 ( 这里的资源最主要的是内

    2024年04月12日
    浏览(38)
  • Android Usb(OTG)串口通信,Service 后台服务实现方式

    以下是几个开源的 Android 串口通信库: 1. SerialPort:https://github.com/felHR85/SerialPort 这是一个非常流行的 Android 串口通信库,支持多种设备和多种波特率,并且提供了非常详细的文档和示例代码。 2. android-serialport-api:https://github.com/cepr/android-serialport-api 这是一个简单易用的 And

    2024年02月11日
    浏览(42)
  • Linux进程前台启动与后台启动详解

    1、进程的前台启动与后台启动 在Shell命令行中输入并执行某条命令,会启动一个相应的进程。默认情况下,我们所启动的进程属于前台进程,前台进程会将执行过程中产生的相关信息显示在终端上, 并且在进程的执行过程中会占据当前终端。如果进程没有结束, 则用户不能

    2024年02月06日
    浏览(39)
  • 前端将file文件传给后台,后台将文件传给前台(包含上传下载)

    在开发过程中,经常会遇见对文件的处理。 例如:在上传、下载文件时,需要在前端选完文件传到后台传到服务器;或者文件从后台,经过特定需求的处理在返回给前台。 中间处理过程各种各样,但有两个过程是固定的 前端传给后台 后台返回给前端 经常用到的上传就是对

    2024年02月11日
    浏览(54)
  • SpringBoot微信小程序商城源码(前台+后台)

    🍓🍓 文末获取联系 🍓🍓 产品介绍   本产品用java技术开发的小程序前后台源码代码和视频开发教程。   产品主要包含一套Spring Boot小程序商城代码和一套小程序开发全栈实战项目视频课程。 小程序商城源代码介绍:   系统由:Spring Boot后端API,web管理后台 和 微信小

    2024年02月10日
    浏览(89)
  • Android+IDEA后台+MySQL数据库数据交互实战案例(A电脑:Android B电脑:IDEA后台)

    目录 一、实现功能: 二、实战部署: 2.1 Android项目详解: 2.1.1 Android定义返回实体类(如是返回基本类型如int String Boolean 等无需建类) 2.1.2 Android定义接口 2.1.3 Android定义配置文件,设置IDEA电脑主机IP(localhost)以及端口号 2.1.4 Android使用Retrofit框架进行网络请求,并使用工具

    2024年02月03日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包