本文小编为大家详细介绍“AndroidO对后台Service限制怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“AndroidO对后台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,很简单,通过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),那么需要在清单文件中声明权限。然后在Activity中启动前台Service,为了兼容Android 8.0之前的版本,代码应该如下我们还要记得在任务完成时销毁Service,可以在Activity的onDestroy()
中调用stopService()
,也可以在Service中调用stopSelf()
。到底调用哪种需要根据具体要求来选择。在Service创建时,我们需要调用Service.startForeground()
当一个app处于前台时,它可以随意创建和使用后台服务。当这个app进入后台,它只有几分钟的窗口期可以创建和使用服务。当这个窗口期结束后,系统认为这个app进入了空闲状态,此时系统会停止app的后台服务。官方建议使用JobScheduler替换后台Service,官方还举了一个例子,有一个图库app需要检测当前用户是否收到了来自朋友分享的图片,即使app没有运行于前台。在Android 8.0之前,可以使用后台Service来检测应用的云存储,但是这有一个问题,这个Service一起在后台免费云主机域名运行,它会消耗资源,影响手机性能。但是从Android 8.0,使用JobScheduler替换后台Service,它会周期性启动一个任务,查询服务器,然后退出。相比于后台Service,它消耗的资源明显较少,间接提升了手机性能。读到这里,这篇“AndroidO对后台Service限制怎么解决”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注百云主机行业资讯频道。
这篇文章主要介绍“vue下如何处理鼠标划过事件”,在日常操作中,相信很多人在vue下如何处理鼠标划过事件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue下如何处理鼠标划过事件”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。