返回顶部
首页 > 资讯 > 精选 >Android O对后台Service限制怎么解决
  • 732
分享到

Android O对后台Service限制怎么解决

2023-07-04 15:07:28 732人浏览 八月长安
摘要

本文小编为大家详细介绍“Android O对后台Service限制怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android O对后台Service限制怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢

本文小编为大家详细介绍“Android O对后台Service限制怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android O对后台Service限制怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

Service问题

Service没有界面,运行于后台,它会消耗设备资源,并且可能会导致不好的用户体验,例如资源占用过多,导致设备运行不流畅。为了缓解这个问题,Android O版本(Android 8.0, api 26)对后台Service强加了一些限制。注意,只是对后台Service加了限制,前台Service不受影响。

什么是前台应用

在解释后台Service的限制之前,首先需要知道什么是前台应用,什么是后台应用。

一个前台应用必须满足如下某一个条件:

  • 有可见的Activity。无论是resume状态还是pause状态,只要可见就行。

  • 有前台Service。

  • 有其它app连接到当前app,通过绑定Service或者使用ContentProvider。

前台Service和后台Service

那么前台Service和后台Service如何区分呢?

前台Service会发送一条通知,让用户察觉到有一个Service正在运行,而后台Service没有通知,用户不会察觉到有一个Service正在运行。

那么前台Service和后台Service是如何启动的呢?

对于后台Service,很简单,通过Context.startService()启动的就是后台Service。

对于前台Service呢,这个有点复杂。在Android 8.0之前,首先通过Context.startService()启动一个后台Service,然后通过Service.startForeground()发送一条通知,如此一来,后台Service就变成了前台Service。但是从Android 8.0开始,系统限制了后台app创建后台服务,所以就无法再使用之前的方法把后台Service提升到前台。

为了解决后台app无法创建前台Service问题,Android 8.0又引入了一个新方法Context.startForegroundService()来直接启动一个前台Service,但是当系统创建这个前台Service后,应用需要在5秒内调用Service.startForeground()来显示一个通知,否则系统会停止这个前台Service,并弹出ANR。

从Android 9.0开始(Android P, API 28),如果要创建前台Service,还要在AndroidManifest.xml中声明android.permission.FOREGROUND_SERVICE权限,这是一个普通的权限,系统会自动授予app。如果不这样做,会抛出异常。

下面给出一个例子,如何创建前台Service。

首先App的目标版本是Android 10(API 29),那么需要在清单文件中声明权限。

<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

然后在Activity中启动前台Service,为了兼容Android 8.0之前的版本,代码应该如下

    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mIntent = new Intent(this, MyService.class);        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {            startForegroundService(mIntent);        } else {            startService(mIntent);        }    }

我们还要记得在任务完成时销毁Service,可以在Activity的onDestroy()中调用stopService(),也可以在Service中调用stopSelf()。到底调用哪种需要根据具体要求来选择。

在Service创建时,我们需要调用Service.startForeground()

    public void onCreate() {        super.onCreate();        // 发送通知,把service置于前台        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);        // 从Android 8.0开始,需要注册通知通道        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {            NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID,                    "Service notification channel", NotificationManager.IMPORTANCE_DEFAULT);            notificationManager.createNotificationChannel(notificationChannel);        }        NotificationCompat.Builder builder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID)                .setSmallIcon(R.mipmap.ic_launcher)                .setContentTitle("Service");        // 注意第一个参数不能为0        startForeground(666, builder.build());    }

后台Service限制

当一个app处于前台时,它可以随意创建和使用后台服务。当这个app进入后台,它只有几分钟的窗口期可以创建和使用服务。当这个窗口期结束后,系统认为这个app进入了空闲状态,此时系统会停止app的后台服务。

解决后台Service限制

官方建议使用JobScheduler替换后台Service,官方还举了一个例子,有一个图库app需要检测当前用户是否收到了来自朋友分享的图片,即使app没有运行于前台。在Android 8.0之前,可以使用后台Service来检测应用的云存储,但是这有一个问题,这个Service一起在后台运行,它会消耗资源,影响手机性能。但是从Android 8.0,使用JobScheduler替换后台Service,它会周期性启动一个任务,查询服务器,然后退出。相比于后台Service,它消耗的资源明显较少,间接提升了手机性能。

读到这里,这篇“Android O对后台Service限制怎么解决”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: Android O对后台Service限制怎么解决

本文链接: https://lsjlt.com/news/346226.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android O对后台Service限制怎么解决
    本文小编为大家详细介绍“Android O对后台Service限制怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android O对后台Service限制怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢...
    99+
    2023-07-04
  • phpstorm设置内存限制后打不开了怎么解决
    本篇内容介绍了“phpstorm设置内存限制后打不开了怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!具体问题描述:phpsotrm在...
    99+
    2023-06-21
  • Linux开启SSH后没有限制Limit值问题怎么解决
    这篇文章主要讲解了“Linux开启SSH后没有限制Limit值问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux开启SSH后没有限制Limit值问题怎么解决”吧!  解决方...
    99+
    2023-06-13
  • 如何解决Android项目中EditText对字数的检测和限制
    如何解决Android项目中EditText对字数的检测和限制?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。控件EditText在Android布局中经常用到,...
    99+
    2023-05-31
    android edittext roi
  • php前台正常后台不能登录怎么解决
    本篇内容主要讲解“php前台正常后台不能登录怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php前台正常后台不能登录怎么解决”吧!问题描述:当用户在使用PHP网站后台时,他们遇到了不能登...
    99+
    2023-07-06
  • 帝国cms后台登录系统限制次数,60分钟过后重新登录解决办法
    帝国cms后台登录系统一不小心登录频繁就提示: 系统限制的登录次数不得超过5次,请等60分钟过后,方可重新登录 主要原因就是频繁的输错用户名或者密码导致登录受限 解帝国cms后台登录系统限制次数方法一:等待60分钟,然后再尝试登录 ...
    99+
    2023-09-08
    php java 服务器
  • 帝国cms 解决后台登录次数不得超过5次限制的方法
    解决方案: 1、打开数据表 “phome_enewsloginfail”, 有几个字段:ip num lasttime 删除里面的记录,然后再重新登录就没有错误提示了 2、修改e/class/co...
    99+
    2022-06-12
    帝国cms后台地址 帝国cms后台密码 帝国cms后台认证码
  • weblogic控制台无法访问怎么解决
    有多种可能原因导致Weblogic控制台无法访问,以下是一些常见的解决方法:1. 检查网络连接:确保您的计算机与Weblogic服务...
    99+
    2023-09-01
    weblogic
  • 云服务器流量限制怎么解决
    云服务器的流量限制通常包括但不限于以下几种情况: 超过预置流量:云服务器会在预览页面上显示流量超出预设量的提示,通常情况下,超出的部分不会显示在下一级页面上。这种情况下,您可以通过在后续的页面上添加自定义代码或增加缓存来解决此问题。 网...
    99+
    2023-10-26
    流量 服务器
  • 织梦cms后台数据库出错怎么解决
    织梦cms后台数据库出错解决方法:1、尝试重新设置数据库连接配置,确认数据库的用户名、密码、主机和端口号是否正确;2、尝试使用织梦CMS自带的数据表修复工具进行修复;3、使用文本编辑器打开并修改数据库配置信息;4、使用织梦CMS自带的SQL...
    99+
    2023-07-19
  • idea控制台日志不打印怎么解决
    如果idea控制台日志不打印,可能有以下几种解决方法: 检查日志级别:请确保你的日志级别设置正确。在IDEA中,可以在"...
    99+
    2024-02-29
    idea
  • android安装后启动出错怎么解决
    这篇文章主要介绍“android安装后启动出错怎么解决”,在日常操作中,相信很多人在android安装后启动出错怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”android安装后启动出错怎么解决”的疑...
    99+
    2023-06-22
  • 代理ip怎么解决爬虫中的限制
    这篇文章主要讲解了“代理ip怎么解决爬虫中的限制”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“代理ip怎么解决爬虫中的限制”吧!代理IP可以帮助我们更换计算机IP,有了代理IP就可以解决IP...
    99+
    2023-06-20
  • win7恢复USB接口被限制怎么解决
    如果Win7的USB接口被限制,可能是由于系统设置或驱动问题导致的。以下是一些可能的解决方法:1. 检查系统设置:进入控制面板,选择...
    99+
    2023-10-20
    win7
  • SAP Business Application Studio的权限控制怎么解决
    今天就跟大家聊聊有关SAP Business Application Studio的权限控制怎么解决,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。我第一次尝试Business App...
    99+
    2023-06-04
  • win10限制本地账户使用权限问题怎么解决
    要解决Windows 10中本地账户的权限限制问题,可以尝试以下方法:1. 使用管理员账户登录:确保您使用具有管理员权限的账户登录。...
    99+
    2023-09-20
    win10
  • mac硬盘权限限制怎么解决,mac硬盘权限拒绝访问怎么处理
    如果你是一个Mac老用户,想必你也遇到过Mac对硬盘只有“只读”权限的情况,也就是无法拷贝文件进去,也无法修改硬盘里的文件。遇到这种问题你是怎么解决的呢?硬盘就是用来存储文件的,如果只能读不能写,硬件将毫无用处。如果你手里的硬盘就是只读的权...
    99+
    2023-09-15
    macos
  • 怎么解决PostgreSQL窗口函数调用的限制
    这篇文章主要讲解了“怎么解决PostgreSQL窗口函数调用的限制”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决PostgreSQL窗口函数调用的限...
    99+
    2024-04-02
  • PHP中怎么解决上传文件大小限制
    本篇文章给大家分享的是有关PHP中怎么解决上传文件大小限制,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。PHP上传文件大小限制解决方法:***:在php.ini里面查看如下行:...
    99+
    2023-06-17
  • 亚马逊免费服务器限制怎么解决
    检查访问速度:检查你的 IP 地址、DNS 服务器是否正确设置,检查服务器是否运行 Web 服务器,确保它能够处理请求并将请求发送到正确的服务器。 确保安全:确保你的 SSL 证书和其他安全措施得到了正确的配置,以避免受到攻击和数据泄露。...
    99+
    2023-10-27
    亚马逊 服务器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作