开发工具:
文件大小: 398kb
下载次数: 0
上传时间: 2019-04-20
详细说明:android后台限制方式,以及系统流畅度,对系统更加了解处理对用户可见的任务时,应用将被置于白名单中,例如:
·处理一条高优先级Firebase云消息传递(FCM)(https;/firebase.google.com/docs/cloud-messaging/消息。
·接收广播,例如短信/彩信消息。
从通知执行Pendingintent(https://developer.andraid.com/reference/android/app/pendingintent.htm1)
在很多情况下,您的应用都可以使用 Jobscheduler
(https://developer.android.com/reference/android/app/job/jobscheduler.html)作业替换后台服务。例如
CoolPhotoApp需要检查用户是否已经从朋友那里收到共享的照片,即使该应用未在前台运行
之前,应用使用一种会检查其云存储的后台服务。为了迁移到 Android8.0,开发者使用一个计划作业替
换了这种后台服务,该作业将按一定周期启动,查询服务器,然后退出
在 Android8.0之前,创建前台服务的方式通常是先创建一个后台服务,然后将该服务推到前台。
Android8.0有一项复杂功能;系统不允许后台应用创建后台服务。因此, Android8.0引入了一种全新的
方法,即 Context, start Foregroundservice(),以在前台启动新服务。
在系统创建服务后,应用有五秒的时间来调用该服务的 startForeground()
(https://developer.androidcom/reference/android/app/service.html#startforeground(int,androidapp.Notification))
方法以显示新服务的用户可见通知。
如果应用在此时间限制内天调用 startForeground()
(https://developer.androidcom/reference/android/app/service.html#startforeground(int,
android.ap. Notification)),则系统将停止服务并声明此应用为ANR
(https://developer.androidcom/training/articles/perf-anr.html
广播限制
如果应用注册为接收广播,则在每次发送广播时,应用的接收器都会消耗资源。如果多个应用注册为接收
基于系统事件的广播,这会引发问题;触发广播的系统事件会导致所有应用快速地连续消耗资源从而降
低用户体验
为了缓解这一问题, Android7.0(AP级别25)对广播施加了一些限制,如后台优化
https://developer.android.com/topic,/performance/background-optimizationhtm)中所述。
Android8.0让这些限制更为严格。
针对 Android8.0的应用无法继续在其清单中为隐式广播注册广播接收器。隐式宀是一种不专门针对
该应用的广播。例如, ACTION PACKAGE REPLACED
(https://developer.androidcom/reference/android/content/intent.html#actionPackAgeReplAced)就是一种隐式
广播,因为它将发送到注册的所有侦听器,让后者知道设晉上的某些软件包已被替换。
不过, ACTION MY PACKAGE REPLACED
(https://developer.androidcom/reference/android/content/intent.htmihactionMyPackaGeReplAceD)不是隐式广
播,因为不管已为该广播注册侦听器的其他应用有多少,它都会只发送到软件包已被替换的应用。
应用可以继续在它们的清单中注册显式广播。
应用可以在运行时使用 Context. registerReceiver()
(https://developer.android.com/reference/android/content/context.html#registerreceiver
( android. content, BroadcastReceiver, android. content. ntentFilter)为任意广播(不管是隐式还是显式)注
册接收器。
需要签名权限(htt://developer,android.com/guide/topics/manifest/permission-elementhtm#peve的广播不受此限
制所限,因为这些广播只会发送到使用相同证书签名的应用,而不是发送到设备上的所有应用
在许多情况下,之前注册隐式广播的应用使用 Jobscheduler
(https://developer,android.com/reference/android/app/job/jobscheduler.html)作业可以获得类似的功能。
例如,一款社交照片应用可能需要不时地执行数据清理,并囯倾冋于在设备连接到充电器时执行此操作。
之前,应用已经在清单中为 ACTION POWER CONNECTED
(https://developer.androidcom/reference/android/content/intent.htmi#actionPoweRConnEctEd)注册了一个接收
器;当应用接收到该广播时,它会检查清理是否必要。为了迁移到 Android8.0,应用将该接收器从其清
单中移除。
应用将清理作业安排在设备处于空闲状态和充电时运行。
注:很多隐式广播当前均已不受此限制所限。应用可以继续在其清单中为这些广播注册接收器,不管应用
针对哪个AP级别。有关已豁免广播的列表,请参阅隐式广播例外
(https://developer.androidcom/about/versions/oreo/background-broadcasts.html
: notel
迁移指南
默认情况下,这些更改仅影响针对0的应用。不过,用户可以从 Settings屏幕为任意应用启用这些限
制,即使应用并不是以O为目标平台
您可能需要更新应用,使其符合新限制。
了解您的应用如何使用服务。如果您的应用依赖某些在它处于空闲时于后台运行的服务,您需要替换这些
服务。
可能的解决方法包括
如果处于后台时您的应用需要创建一个前台服务,请使用新的
NotificationManager. startserviceIn Foreground(
方法,而不是创建一个后台服务,然后尝试将其推到前台。
如果服务容易被用户注意,请将其设为前台服务。例如,播放音频的服务始终应为前台服务。
1E NotificationManager start ServiceIn Foreground()
TiOsEstartservice((htTps://developer.android.com/reference/android/content/context.html#tstartservice
( android. content, Intent))创建服务。*寻找一种使用计划作业实现服务功能的方式。如果服务未在执行容
易立即被用户注意到的操作,一般情况下,您都能够使用计划作业。
发生网络事件时,请使用Fcm(Https;/firebase.google.com/docs/cloud-messaging选择性地唤醒您的应用
而不是在后台轮询
·在应用正常处于前台之前,请推迟后台工作
检査在您应用的清单中定义的广播接收器。如果您的清单为显式广播声明了接收器,您必须予以替换。
「能的解决方法包括
通过调用 Context, registerReceiver()
(https://developer.androidcom/reference/android/content/context.html#registerreceiver
( android. content. BroadcastReceiver, android. content. IntentFilter)而不是在清单中声明接收器的方式在运
行时创建接收器。
使用计划作业检查条件是否会触发隐式广播。
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.