值得你关注的Android8.0(Android O)上的重要变化

2023-05-16

刚适配完Android7.0还没多久,就看到Google官方推出的Android8.0(Android O)的开发者预览版新闻,我的心情你可以好好想想。对于上层应用开发者的我来说,适配新版本的工作还好,而有JNI且有很多深层修改的人来说则是痛苦的。那么这一次的大版本更新,最终何时定型发布?她都带来了哪些新的限制与变化,对我们已有的应用有何影响?新增了什么特性,能否利用起来增加新奇有趣的功能呢?

本文在整理官方的Preview文档同时,运行部分示例代码,为各位一一展现。如果你英文还不错,时间也充裕,文末有官方文档链接,供你亲自琢磨和体验。

Android O完善计划与发布时间

Google在2017年3月21日首次推送Android O开发者预览版,那接下来的更新和到Android O真正稳定,最终发布是在何时呢?借用官方文档的时间轴图:

android O timeline

从上能够看出,此次发布的DP1(开发者预览版)的更新版本DP2在五到六月份之间,而DP1和DP2都主要面向开发者,发现兼容性问题,体验反馈新特性,此时的系统镜像自身还有很多稳定性问题,还不适合日常使用;

DP3、DP4已经到七月份,提供了最终的API和官方SDK,在此基础上可以做完整的兼容性测试和基于新特性开发新功能。最终的Android O版本发布则定在了第三季度。

根据以往的经验,第三季度到年底才陆续有旧设备的OTA升级,而到国内的新机发布和旧设备的升级则持续到了第二年的三四月份。因此,从最后的发布时间看,现在是可以先松口气。但是很多实际情况是很早的完成了Google亲儿子手机的适配工作,而国内手机厂商又大肆修改,带来其他很多不确定性。所以还是早做准备,心里有数,毕竟早起的鸟儿有虫吃。

新的限制与变化

Android新版本的限制与变化主要分成两方面,一是影响所有app的,二是影响面向新版本app的(主要是targetSdkVersion指向新版本)。后者的适配还好,一般的应用不会非常快的修改targetSdkVersion;而前者是实实在在的需要立即着手跟进的。

影响所有应用的:

1.后台限制

(1)后台运行限制

  • 当应用进入到后台,没有可见且运行的组件(如后台Service),系统会释放应用所持有的唤醒锁(wakelock)

  • 使用 NotificationManager.startServiceInForeground()方法启用foreground Service,旧方法不再有效

(2)后台位置获取限制
在Android O系统上,后台运行的应用,不再能频繁的收到位置更新的信息;但具体更新频次减少到多少,还需要最重版发布后测试确定

2.安全相关的变化

(1)平台不再支持SSLv3
(2)HttpsURLConnection在HTTPS链接建立时,不再自动切换到早期TLS协议版本重试
(3)应用的WebView实例,将运行在独立的进程中

3.隐私策略变化

(1)ANDROID_ID 不再是设备中所有应用共享的,而是每个应用获取到的都不一样,而且以包名和签名作为区分;卸载后重新安装也不会发生变化;但是手机恢复出厂设置后,应该和上一次的不再一致

(2)获取系统属性net.hostname,将得到null

4.应用快捷方式变化
以com.android.launcher.action.INSTALL_SHORTCUT广播方式创建快捷方式不再有效,而要使用 ShortcutManager的 requestPinShortcut()方法。

5.Alert Window显示变化
在声明SYSTEM_ALERT_WINDOW 权限后,选择使用TYPE_SYSTEM_ALERT等来使弹窗显示在其他应用之上;在Android O系统上都将显示在TYPE_APPLICATION_OVERLAY类型的窗口之下。而targetSdkVersion为android O的应用直接使用TYPE_APPLICATION_OVERLAY显示Alter Window。这样你的弹框可能还是在别人的弹窗之下。

6.其他
(1)蓝牙:ScanRecord.getBytes()方法变化
(2)键盘导航:使应用支持实体键盘导航(以前就有,只是重新提一下)
(3)网络连接及HTTPS相关:在connect失败之后,调用send(DatagramPacket)会抛出SocketException,以及其他一些细节的变化
(4)当集合为空时,AbstractCollection.removeAll() 和 AbstractCollection.retainAll() 将抛出 NullPointerException
(5)本地化与国际化:如Currency.getDisplayName()等方法默认调用 Locale.getDefault(Category.DISPLAY),默认时区的解析等
(6)联系人统计数据:不再提供联系人邮件或电话准确的联系过的次数信息,而是仅提供近似值

影响面向android O应用的:

1.后台限制
(1)startService() 将抛出 IllegalStateException
(2)限制在AndroidManifest.xml中注册接收隐式广播,如ACTION_PACKAGE_REPLACED ,但也有些例外如ACTION_BOOT_COMPLETED,ACTION_LOCALE_CHANGED(所有例外参考文末连接)。(注意此部分限制都是只针对targetSdkVersion为android O,或者编译的SDK为android O及以上的的,低于的则不受影响)

2.隐私相关变化
(1)获取系统属性net.dns1、net.dns2、net.dns3 和 net.dns4不再可用
(2)不再支持 Build.SERIAL,而改为 Build.getSerial()

3.本地库变化
在Android O上强制要求Segment不能同时具备写和可执行,如数据段不可执行,代码段不可写。

4.ContentProvider的变更通知
调用 ContentResolver.notifyChange()和registerContentObserver(Uri, boolean, ContentObserver) 实现通知和监听某些Uri上的变化,在Android O上则要求uri对应的ContentProvider要正确定义,但是没有定义会有怎样的问题并没有提及

5.其他
Alter Window的显示,集合排序方法的变化和获取用户帐号权限变化等。

新的特性

在写本文时,Google官方已推出部分中文文档(应该很快会全部更新),鉴于此,本处仅展示下有趣且具有示例代码的多频道(Channel)的通知、画中画和自动填充框架

1.多频道通知
我的理解是将应用发出的通知进行细化,划分成不同的类别,就像电视的一个个频道,可以针对频道进行操作。如用户可以屏蔽某个频道的通知,而不是这个应用的所有通知消息;开发者可以针对频道设置通知的震动、声音等。

通知显示和原来没有大的区别,如下图所示:

多频道通知栏显示

在设置中可以看到针对某个频道通知进行控制
多通道通知栏设置

2.画中画(Picture In Picture)
Activity的显示多了一种方式,只要在AndroidManifest.xml中设置android:supportsPictureInPicture为true即可,实现如下图显示效果:

画中画

注意,处在画中画模式中的Activity会回调onPause方法,因此像播放视频类的应用,不要在onPause中停止播放,而是在onStop方法中停止。

3.自动填充框架(AutofillFramework)
简单分为提供自动填充服务的应用和使用自动填充功能的应用。前者通过继承AutoFillService解析界面上的view结构提供自动填充和保存数据的能力,后者在标准View上不做修改就能使用此服务,而自定义View还得做些处理才行。可是提供自动填充服务的应用需要取得信任,还要做很多额外的事情,后续推广不知能否推开。

本来修改了测试Demo可以在通知栏Demo中使用自动填充的功能,结果系统不稳定,已经无法在任何页面显示自动填充的弹窗,而且还出现几次死机,因此没有截图。

如何体验到Android O

把手中的设备刷到Android O的操作步骤很简单,首先查找手上的设备是否有支持Android O预览版的机型
Nexus 5X
Nexus 6P
Nexus Player
Pixel C
Pixel
Pixel XL

我使用的是Nexus 6P,具体步骤如下:官网链接

1.下载到对应ZIP包
解压,目录中包含了flash-all.sh

2.USB连接手机
确保可调用adb命令,即在环境变量中设置好adb命令的路径

3.进入fastboot模式
adb reboot bootloader
(没有采用按键方式进入)

4.解锁bootloader
尝试使用fastboot flashing unlock或者fastboot oem unlock,本人手机已经解锁过,因此没有使用

5.刷入新系统
在终端命令行切到刚才解压ZIP文件后的目录,即在flash-all.sh目录;执行flash-all.sh(windows可使用flash-all.bat)。执行完毕之后即可进入Android O

6.锁定bootloader
执行fastboot flashing lock或者fastboot oem lock,本人没有执行

最后再次提醒,请以最后发布的官方文档为准。而且此版本仅供开发者体验和测试反馈,不适合日常使用,避免不必要的麻烦。

转载请注明出处:http://blog.csdn.net/w7849516230,欢迎关注微信公众号“编程阳光”

1.Android O Preview官方说明
2.可以注册的隐式广播

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

值得你关注的Android8.0(Android O)上的重要变化 的相关文章

  • 无人机姿态解算:四元数及其与欧拉角的转换

    无人机姿态解算 xff1a 四元数及其与欧拉角的转换 引言 xff1a 获得无人机飞行时的飞行姿态对于无人机稳定控制来说至关重要 无人机主要通过传感器数据融合来进行状态估计 xff0c 常用于无人机的传感器包括 xff1a MPU xff0
  • (纯干货)备战“金3银4”,拿下这101道面试题“10拿9稳””!

    前言 xff1a 马上就到了 金9银10的 面试季 xff0c 在这里作者给各位整理了一些大厂常用的面试题 xff0c 希望能对各位有所帮助 正文 xff1a 1 问 xff1a 你在测试中发现了一个bug xff0c 但是开发经理认为这不
  • 用Excel分析音视频同步

    声明 xff1a 这里主要介绍如何运用Excel来分析音视频是否同步 xff0c 希望可以对大家有所帮助 介绍 xff1a 学习音视频就一定要知道做音视频同步 xff0c 而现在我们来分析音视频同步的工具也是有的 xff0c 比如easyI
  • 使用VLC 在PC端搭建RTP环境

    声明 xff1a 本文是我在工作中遇到的关于环境搭建问题后的一些总结 xff0c 希望可以对你有所帮助 介绍 xff1a 搭建方法 xff1a 1 xff09 搭建 VLC 软件 xff0c 点击媒体菜单 xff0c 选择 流 选项 xff
  • 使用VLC 在PC端搭建RTSP环境

    声明 xff1a 本文是我在工作中遇到的关于环境搭建问题后的一些总结 xff0c 希望可以对你有所帮助 介绍 xff1a 搭建方法 xff1a 1 xff09 搭建 VLC 软件 xff0c 点击媒体菜单 xff0c 选择 流 选项 xff
  • 2020总结

    2020年可以说是我开始工作的第二年了 在第一年中我可以说了解了工作和组里的基本情况 xff0c 而这第二年就开始真正的加深学习了 还是以时间线一点点的慢慢讲吧 春节前我们一边工作一边准备年会 我们公司有个惯例那就是让每年最新入职的员工来主
  • 嵌入式Linux——网卡驱动(1):网卡驱动框架介绍

    声明 xff1a 文本是看完韦东山老师的视频和看了一些文章后 xff0c 所写的总结 我会尽力将自己所了解的知识写出来 xff0c 但由于自己感觉并没有学的很好 xff0c 所以文中可能有错的地方敬请指出 xff0c 谢谢 在介绍本文之前
  • ROS发布订阅的消息的种类及使用

    1 消息 std msgs 的种类 在 opt ros melodic include std msgs文件夹中查询 或参考 xff1a https www itdaan com tw b30f2309fe4b1b2d5993c8ea0cb
  • SSD1306部分命令

    命令描述 1 基础命令 1 1 为页地址模式设置列低半字节的开始地址 xff08 00h 0Fh xff09 这个命令专门为8位列地址的低半字节设置以通过页地址模式显示RAM中的数据 而每一个数据使用后列地址会自动增加 请参考表格9 1的部
  • 嵌入式Linux——IIC总线驱动(3):IIC驱动OLED外设

    简介 xff1a 本文主要介绍在jz2440开发板上驱动OLED外设 xff0c 使其显示我们在应用层输入的语句 而同时我将该文分成了两部分 xff0c 第一部分讲解i2c总线的实现 xff0c 而第二部分讲解在i2c总线实现后 xff0c
  • 嵌入式Linux——RTC驱动(1):RTC框架分析

    简介 xff1a 本文通过分层的方式介绍RTC驱动 xff0c 通过分析RTC在不同层次中所做的不同工作 xff0c 以及各个层次之间的关系来了解RTC驱动框架 本文分为两部分 xff0c 第一部分总的介绍RTC框架 xff0c 而第二部分
  • 嵌入式Linux——DMA:在内核中简单使用DMA实现内存中数据传递

    简介 xff1a 本文主要介绍在内核中简单使用DMA实现内存数据传递 由于本篇文章中没有介绍与框架相关的程序 xff0c 只是使用字符设备来操作DMA xff0c 同时也没有抽象的层次 xff0c 因此本文中代码分析部分就相对简单 但我还是
  • 嵌入式Linux——uevent机制:uevent原理分析

    简介 xff1a 本文主要介绍uevent机制是什么 xff0c 并通过代码分析使用uevent机制生成设备节点的过程 而本文将分为两部分 xff0c 第一部分我们介绍一些预备知识和uevent的原理 xff0c 而第二部分 通过代码介绍使
  • 嵌入式Linux——kmsg:分析/proc/kmsg文件以及写自己的/proc/mymsg

    简介 xff1a 本文主要分析 proc kmsg文件的形成过程以及使用cat proc kmsg查看log buf中的信息时所要经历的代码 并结合上面的分析写自己的 proc mymsg和myprintk Linux内核 xff1a li
  • 嵌入式Linux——学习经历

    简介 xff1a 本文主要介绍我学习嵌入式的经历 并结合自身的经验希望可以对大家有所帮助 视频及教材 xff1a 郭天祥相关视频及教材 xff0c 天狼星相关视频及教材 xff0c 野火迷你相关视频及教材以及韦东山100ask官网所介绍的视
  • 指针简介(3)—— 指针函数与函数指针

    声明 xff1a 本文是阅读周立功老师的程序设计与数据结构后所写 xff0c 很多内容其实是书中的内容 xff0c 所以如果您想了解更多这方面的知识 xff0c 您可以阅读这本书 在前面一节我们简单介绍了指针 数组 指针数组以及数组指针 而
  • Docker常用操作命令

    成功安装Docker之后 启动Docker 如果遇到启动问题请参考 https blog csdn net w1316022737 article details 83692701 下来简单介绍Docker容器常用操作命令 安装操作MySQ
  • DIY 自己的路由器系统

    sudo apt get install subversion build essential libncurses5 dev zlib1g dev gawk git ccache gettext libssl dev xsltproc z
  • (ROS)解决gazebo闪退和tk窗口不显示问题

    问题1 xff1a 运行gazebo的时候 xff0c gazebo窗口闪退 解决办法 xff1a 1 删除gazebo xff0c 重新安装适合的版本然后再重新运行 或者 2 关闭加速3D图形 xff08 需要关闭虚拟机 rostopic
  • 【常见的优化算法介绍】

    常见的优化算法介绍 1 批量梯度下降算法 xff08 batch gradient descent BGD xff09 每次迭代都需要把所有样本都送入 xff0c 这样的好处是每次迭代都顾及了全部的样本 xff0c 做的是全局最优化 但是有

随机推荐

  • 树莓派无显示屏 ssh 连接的方法

    一般来说 xff0c 树莓派买回来很少配置显示屏 xff0c 通常只通过ssh远程登陆来控制树莓派 而树莓派通过ssh连接有三种方法 一 通过网线将树莓派连接到路由器上 这个方法成功率极高 xff0c 我一般都是采用这种方法 1 允许ssh
  • AIRSIM 中文使用手册-2021/4/6

    AIRSIM 中文使用手册 截至2021 4 6 前言1 HomeHome日志变更 2 获取AIRSIM下载二进制文件在Windows上构建在Linux上构建Linux上的DockerAzure上的AirSim开发环境自定义虚幻环境AirS
  • 最新研究:AI已可诊断50种眼疾,1.2秒内确认神经系统疾病

    本文由人工智能观察编译 译者 xff1a Sandy 近年来 xff0c 人工智能技术与医疗健康领域的融合不断加深 xff0c 且在科技巨头与资本巨头积极布局的努力下 xff0c 智能医疗正在不断取得新的突破 而根据 自然医学 xff08
  • 如何将Set转换为Array?

    本文翻译自 xff1a How to convert Set to Array Set seems like a nice way to create Arrays with guaranteed unique elements but i
  • 小米2013校园招聘笔试题

    题目 xff1a 一个数组里 xff0c 除了三个数是唯一出现的 xff0c 其余的都出现偶数个 xff0c 找出这三个数中的任一个 比如数组元素为 1 2 4 5 6 4 2 xff0c 只有1 5 6这三个数字是唯一出现的 xff0c
  • NVIDIA Jetson NX 模组初始化(刷机+扩容)

    项目场景 xff1a 老师让我学习使用NVIDIA Jetson NX做项目开发 于是自己研究一下 由于第一次接触 前期踩坑用了两周时间 特此记录 1 刷机 使用的是NVIDIA Jetson NX 模组 xff0c 网上买大约4 5k x
  • centos+docker设置网易163镜像加速

    镜像加速 鉴于国内网络问题 xff0c 后续拉取 Docker 镜像十分缓慢 xff0c 我们可以需要配置加速器来解决 xff0c 我使用的是网易的镜像地址 xff1a http hub mirror c 163 com 新版的 Docke
  • WSL(ubuntu2204)xfce4安装中文环境和fcitx5框架及中文输入法

    安装中文语言包 sudo apt install language pack zh hans 配置中文显示 首先运行如下命令配置 locale sudo vi etc locale gen 找到 zh CN UTF 8 UTF 8 并取消注
  • detectron2: An object named ‘XXXX‘ was already registered in ‘META_ARCH‘ registry

    根据该作者 https blog csdn net qq 20793791 article details 107924375 所述的方法 xff0c 我又想到了 看我的目录文件是否是 python package xff0c 突然发现虽然
  • ubuntu20.04中python2和python3切换

    Ubuntu 20 04 LTS已经移除Python2 xff0c 默认安装python3 xff0c 但是很多时候还是会经常用到python2 7版本 xff0c 这里首先单独安装python2 7 xff0c 然后配置python2和p
  • ubuntu18.04 pycorrector安装

    今天尝试对语音识别转录后的文字进行纠错 xff0c 然后就试了一下pycorrector xff0c 在安装pycorrector的时候遇见了下面的问题 xff1a base pip install pycorrector Looking
  • libxcb-xinerama.so.0: cannot open shared object file: No such file or directory

    今天在ubutnu 18 04上装了mayavi 但是写代码可视化点云的时候出现了下面的情况 xff1a QLibraryPrivate loadPlugin failed on 34 home eric anaconda3 envs po
  • 生产者/消费者模式(转载)

    简介 在实际的软件开发过程中 xff0c 经常会碰到如下场景 xff1a 某个模块负责产生数据 xff0c 这些数据由另一个模块来负责处理 xff08 此处的模块是广义的 xff0c 可以是类 函数 线程 进程等 xff09 产生数据的模块
  • 【飞控学习】APM和PX4飞控源码下载及安装

    对于无人机开发的专业人员来说 xff0c APM和PX4是现今市面上最强大的2个开源无人机飞控 学习和查看他们2者的源码 xff0c 将会提高我们对整个无人机的姿态解算和控制的深入理解 现在我们就来下载2者的源码和安装查看2者源码的软件 1
  • Skye无人机换遥控接收机遇到的坑

    Skye的接收机是可以直接用天地飞对码的 xff0c 如果要更换接收机的话需要支持sbus协议或者要有个转码器 xff0c 要更换接收机的话要特别注意 xff0c skye主板上集成了一个反相器 xff01 如果用单片机自己做转码器的话直接
  • opencv算法移植到嵌入式平台(1): opencv工程打包成库

    1 将要用到的opencv 相关的库打包 xff0c 利用你要移植的平台第三方编译器进行交叉编译 xff0c 因为如果你利用其它编译器即使编译通过了 xff0c 在另外的工程调用时也会提示错误 xff0c 一般会报错误 xff1a unde
  • 值得你关注的Android6.0上的重要变化(一)

    伴随着众多新特性和新功能 xff0c Android6 0 xff08 API level 23 xff09 在系统和API上都有着诸多的改变 本文着重介绍几个关键变化 xff0c 以帮助你理解这些改变对你的APP产生的影响 一 运行时权限
  • 编译开源LibreOffice的Android版本——开源Office文档查看器

    项目近期需要用到文档查看器 xff0c 现有的WPS之类确实比较好用 xff0c 无奈还需要对应用做些处理 xff0c 只好寻找开源的实现 开源的文档查看器主要两种方式 xff0c 一种是完整的Android版本实现 xff0c 直接拿来即
  • Linux下利用信号的异步串口中断响应

    先悔过一下 因为一个月前就在学习这个 xff0c 当时解决的差不多了 xff0c 想着抽个空再记录这些 xff0c 没想到这么短的时间就已经忘得 差不多了 xff0c 真是不好 xff0c 应该趁热打铁 废话不多说了 xff0c 这里主要介
  • 值得你关注的Android8.0(Android O)上的重要变化

    刚适配完Android7 0还没多久 xff0c 就看到Google官方推出的Android8 0 xff08 Android O xff09 的开发者预览版新闻 xff0c 我的心情你可以好好想想 对于上层应用开发者的我来说 xff0c