作者:HW-ZF
为了减少后台页面弹出对用户的影响,谷歌从Android Q开始限制应用后台启动Activity,但部分合理的使用场景如锁屏音乐、语音电话、闹钟等场景也受到影响,需要开发进行重点关注和适配。
变更介绍
为了用户能更好的控制屏幕上显示的内容,最大限度减少后台弹页面对用户的打扰,Android Q对应用启动Activity进行了严格的限制。应用只有在满足下方一个或多个条件时才可以启动Activity。
应用处于前台;
桌面widget点击启动Activity;
由桌面点击启动应用;
多任务切换场景(即recent中启动应用);
前台界面A所在的应用启动后台界面B;
临时白名单机制,不拦截通过通知拉起的应用:
应用通过通知,在pendingintent中启动activity;
应用通过通知,在pendingintent中发送广播,接收广播后启动activity,加入临时白名单不拦截;
应用通过通知,在pendingintent中启动service,在service中启动activity,加入临时白名单不拦截。
备注:应用无法通过前台服务让应用处于前台豁免该管控。
变更影响
1、影响范围
该特性对所有非系统应用都生效,开发者需要对自身应用进行排查,如果发现无法整改的问题可以通过下方链接及时反馈给谷歌:
developer.android.google.cn
2、兼容性表现
在Android Q beta1未正式开启该特性,但如果应用的页面存在被管控的场景,系统会通过一个Toast告警提示,提示开发者需要整改,否则应用的某些页面在Android Q的后续版本会被拦截,具体的告警如下:
This background activity start from package-name will be blocked in future Q builds.
3、受影响的业务场景
目前测试发现一些合理的应用场景都有影响,如:锁屏、语音和视频电话、闹钟提醒等。
适配指导
1、开启设置
开发者需要到开发者选项中将“允许系统执行后台活动”设置项关闭来开启该特性。
2、适配方案
(1)使用高优先级的全屏通知来代替弹窗:
首先创建一个NotificationChannel:CHANNEL_ID,然后通过高优先级全屏通知来提醒用户。参考代码如下:
private void showHighNotification() {
Intent fullScreenIntent = new Intent(this, DownloadProviderTestActivity.class);
PendingIntent fullScreenPendingIntent = PendingIntent.getActivity(this, 0, fullScreenIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.drawable.if_apple_2003193)
.setContentTitle('Incoming call')
.setContentText('(919) 555-1234')
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setCategory(NotificationCompat.CATEGORY_CALL)
.setFullScreenIntent(fullScreenPendingIntent, true).build();
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(1, notification);
}(2)将通知与前台服务关联
如果应用需要持续提醒用户(例如来电和闹钟等),需要将通知与前台服务相关联。参考代码如下:
// Provide a unique integer for the 'notificationId' of each notification.
startForeground(notificationId, notification)
(3)灭屏通知适配
在亮屏场景,系统会把全屏通知改成横幅通知提醒用户;在灭屏场景,我们需要通过全屏通知直接拉起Activity并点亮屏幕来提醒用户,拉起的Activity需要设置在锁屏之上显示。参考代码如下:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
音乐锁屏、电话和闹钟等使用场景都可以使用该方案在灭屏状态下提醒用户。





































苏公安网备 32011402010933号