描述

Android Q限制在没有用户交互的情况下加载Activity。这一变化可以最大限度的减少对用户的打扰,保持用户对屏幕上所显示内容的可控性。
运行在Android Q上的APP仅在以下一种或多种情况下可运行Activity:

  1. APP存在一个可视的窗口,例如一个处于前台的Activity
  2. 另外一个处于前台的APP发送一个属于当前APP的PendingIntent。例如Custom Tabs provider发送一个menu item pending intent。
  3. 系统发送一个PendingIntent,例如点击一个通知。
  4. 系统给APP发送一个广播,如SECRET_CODE_ACTION。

注:APP启动一个前台运行的Service并不代表该APP处于前台运行状态。

这一行为变化影响所有运行在Android Q上的app,包括target是Android 9或更低的APP。如果你的APP target是Android 9及以下,并且之前运行在Android 9或更低版本的设备上,那么在该设备升级到Android Q以后,该APP也会受到影响。

警告信息

在Android Q Beta 1版本中,如果你的APP试图从后台启动一个Activity,平台允许加载Activity,但是会在控制台输出警告信息,并且会给用于Toast提示:
This background activity start from package-name will be blocked in future Q builds.

创建通知

谷歌建议使用通知的方式解决这一问题
绝大多数情况下,运行在后台的APP应该创建一个通知,给用户提供一些必要的信息,而不应该直接从后台启动Activity。
某些特殊情况下,你的APP可能需要立即引起用户的注意,例如闹钟响铃或来电提醒。你可以通过以下方式来达到提醒用户的目的:

  1. 创建一个高级别的通知
    确保你创建的通知的标题和消息可以准确表达你的意图。你也可以提供一个FullScreenIntent,示例代码如下:
val fullScreenIntent = Intent(this, CallActivity::class.java)
val fullScreenPendingIntent = PendingIntent.getActivity(this, 0,fullScreenIntent, PendingIntent.FLAG_UPDATE_CURRENT)val notificationBuilder = NotificationCompat.Builder(this, CHANNEL_ID).setSmallIcon(R.drawable.notification_icon).setContentTitle("Incoming call").setContentText("(919) 555-1234").setPriority(NotificationCompat.PRIORITY_HIGH).setCategory(NotificationCompat.CATEGORY_CALL)// Use a full-screen intent only for the highest-priority alerts where you// have an associated activity that you would like to launch after the user// interacts with the notification. Also, if your app targets Android Q, you// need to request the USE_FULL_SCREEN_INTENT permission in order for the// platform to invoke this notification..setFullScreenIntent(fullScreenPendingIntent, true)val incomingCallNotification = notificationBuilder.build()
  1. 显示通知给用户
    当显示通知给用户时,用户可以根据当前的情况选择接受或者取消该通知。例如,用户可以选择接电话,也可以挂掉电话。
    如果你的通知是连续不间断的,例如来电提醒,可以给该通知关联一个foreground service:
// Provide a unique integer for the "notificationId" of each notification.
startForeground(notificationId, notification)

当用户正在使用设备时,系统UI会显示一个heads-up notification取代你的full-screen intent

使用通知的优点

  • 当用户正在使用设备时,系统显示一个heads-up notification,用户可以选择根据当前情况有选择性的处理这个通知。
  • 遵守了不打扰用户的规则(Do Not Disturb)
  • 当设备屏幕关闭时,full-screen intent可以立即显示出来
  • 在Settings界面,用户可以看到最近有哪些App发送过通知,包括从特殊通知渠道发送的。在这个界面,用户可以控制通知是否显示。

在Android Q Beta1版本中,上述行为变化还没有生效。你可以通过开发者选择来模拟这一变化:

  • Settings -> Developer options,取消选择 Allow background activity starts
  • 或者使用命令行:
adb shell settings put global background_activity_starts_enabled 0

参考链接:https://developer.android.google.cn/preview/privacy/background-activity-starts

Android Q 限制后台启动Activity相关推荐

  1. android 10+从后台启动 Activity 的限制

    限制后台启动activity 如果未满足相关条件,则后台不允许启动activity,并会打印如下相关的log: // anything that has fallen through would cu ...

  2. Android10适配-针对从后台启动 Activity 的限制

    Android 10 中的隐私权变更 从 Android 10 开始,系统会增加针对从后台启动 Activity 的限制.此项行为变更有助于最大限度地减少对用户造成的中断,并且可以让用户更好地控制其屏 ...

  3. PendingIntent无法唤起activity | service无法唤起activity【从后台启动activity无效的原因】

    前言 如果你打开activity的代码正确无误,但是使用PendingIntent或者在service中就是无法开启一个activity时,请检查是是否符合下面的情况: 代码正常,打log发现语句也被 ...

  4. Android应用程序内部启动Activity过程(startActivity)的源代码分析

    上文介绍了Android应用程序的启动过程,即应用程序默认Activity的启动过程,一般来说,这种默认Activity是在新的进程和任务中启动的:本文将继续分析在应用程序内部启动非默认Activit ...

  5. Android动画——使用动画启动Activity

    1.使用动画启动Activity概述 我们在Android开发应用时,会遇到一个页面跳转到另一个页面的情况,这时候我们如果使用动画过渡会使得页面更加的流畅. 这是一个滑动式的进入和退出的动画 可以看到 ...

  6. Android Q适配攻略(四)(后台Activity启动限制)

    Android Q之提前适配攻略(一)(图标适配) Android Q之提前适配攻略(二)(后台定位适配) Android Q之提前适配攻略(三)(唯一标识符更改) Android Q之提前适配攻略( ...

  7. Android 应用在后台时,跳转 Activity 会自动切换应用至前台

    本博客 demo 见:demo. 平常用手机的时候经常碰到这种情况,用首屏广告举个栗子~很多应用都会有首屏广告 activity A,假设此应用是 app C,如果此时要使用别的应用,就会使得 app ...

  8. 如何在Android 10中从后台启动活动

    如何在Android 10中从后台启动活动? https://www.it1352.com/1922748.html 小米手机"后台弹出界面(允许应用在后台弹出界面)"权限问题解决 ...

  9. android listview 滑动黑屏,Android 跨进程启动Activity黑屏(白屏)的三种解决方案

    当Android跨进程启动Activity时,过程界面很黑屏(白屏)短暂时间(几百毫秒?).当然从桌面Lunacher启动一个App时也会出现相同情况,那是因为App冷启动也属于跨进程启动Activi ...

最新文章

  1. 如何实现更换Jupyter Notebook内核Python版本
  2. SVN迁移到Git的过程(+ 一些技巧)
  3. CSW:闪电网络是一种证券,BCH避开了它
  4. oracle: 在sqlplus中,执行sql语句
  5. python自动轨迹绘制_Python——自动轨迹绘制
  6. LVS+Keepalived实现高可用集群
  7. 插件化、热补丁中绕不开的Proguard的坑
  8. Halcon数据类型
  9. Mac触发角锁屏不睡眠
  10. dotNET中创建自定义的配置节
  11. 设置OWA重定向URL
  12. 太原科技大学计算机宿舍,太原科技大学宿舍怎么样
  13. 查看android内置(webview)浏览器和系统浏览器内核信息
  14. 学习探究--实信号与复信号
  15. ios审核新坑解决,因为需要访问相机权限被拒绝We noticed that your app requests the user’s consent to access their camera
  16. git教程 git笔记 git常用 git使用 git操作 git简明 git版本控制 git仓库
  17. 面试常问:什么是红黑树?
  18. 学习JavaScript这一篇就够了
  19. 指定gpu训练模型却依然使用了cpu问题解决
  20. [论文阅读]ICE: Inter-instance Contrastive Encoding for Unsupervised Person Re-identification(ICCV2021)

热门文章

  1. 360站长平台关闭官网认证入口
  2. matlab揭秘 david 豆瓣,《Matlab揭秘》(David McMahon)[PDF]
  3. Android Framework层Power键关机流程(二,关机流程)
  4. css 揭秘-读书笔记
  5. 图片中的exif数据
  6. 51nod CSP-S模拟赛 松鼠大作战【倍增】
  7. 车辆管理平台发展思考
  8. 【TWVRP】模拟退火算法求解带时间窗的多车型路径规划问题【含Matlab源码 913期】
  9. 极客时间和极客学院_如何重置“极客琐事”得分(并减少愚蠢感)
  10. ps 切片存储多张图的方法