http://www.2cto.com/kf/201605/510744.html

行为变更

Android N 除了提供诸多新特性和功能外,还对系统和 API 行为做出了各种变更。本文重点介绍您应该了解并在开发应用时加以考虑的一些重要变更。

如果您之前发布过 Android 应用,请注意您的应用可能受到这些平台变更的影响。

性能提升


为延长设备的电池寿命、降低内存使用率以及提升应用性能,Android N 对系统行为做出了一些变更。这些变更可能会影响系统资源和系统通知对应用的可用性。您应仔细检查这些变更并评估应用可能需要做何调整以适应这些变更。

打盹

Android 6.0(API 级别 23)引入了打盹模式,当用户设备未插接电源、处于静止状态且屏幕关闭时,该模式会推迟 CPU 和网络活动,从而延长电池寿命。而 Android N 则通过在设备未插接电源且屏幕关闭状态下、但不一定要处于静止状态(例如用户外出时把手持式设备装在口袋里)时应用部分 CPU 和网络限制,进一步增强了打盹模式。

免费米思米标准件下载
【点击进入】

米思米标准件下载免费,45万种标准件全覆盖, 3步操作生成2D/3D模型,效率提升50%!

查 看

图 1.打盹模式如何应用第一级系统活动限制以延长电池寿命的图示。

当设备处于充电状态且屏幕已关闭一定时间后,设备会进入打盹模式并应用第一部分限制:关闭应用网络访问、推迟作业和同步。如果进入打盹模式后设备处于静止状态达到一定时间,系统则会对PowerManager.WakeLockAlarmManager闹铃、GPS 和 Wi-Fi 扫描应用余下的打盹限制。无论是应用部分还是全部打盹限制,系统都会唤醒设备以提供简短的维护时间窗口,在此窗口期间,应用程序可以访问网络并执行任何被推迟的作业/同步。

免费米思米标准件下载
【点击进入】

米思米标准件下载免费,45万种标准件全覆盖, 3步操作生成2D/3D模型,效率提升50%!

查 看

图 2.打盹模式如何在设备处于静止状态达到一定时间后应用第二级系统活动限制的图示。

请注意,激活屏幕或插接设备电源时,系统将退出打盹模式并取消这些处理限制。此项新增的行为不会影响有关使您的应用适应 Android 6.0(API 级别 23)中所推出的旧版本打盹模式的建议和最佳实践,如打盹和应用待机优化中所讨论。您仍应遵循这些建议(例如使用 Google Cloud Messaging (GCM) 发送和接收消息)并开始安排更新计划以适应新增的打盹行为。

Project Svelte:后台优化

Android N 删除了三项隐式广播,以帮助优化内存使用和电量消耗。此项变更很有必要,因为隐式广播会在后台频繁启动已注册侦听这些广播的应用。删除这些广播可以显著提升设备性能和用户体验。

移动设备会经历频繁的连接变更,例如在 Wi-Fi 和移动数据之间切换时。目前,可以通过在应用清单文件中注册一个接收器来侦听隐式CONNECTIVITY_ACTION广播,让应用能够监控这些变更。由于很多应用会注册接收此广播,因此单次网络切换即会导致所有应用被唤醒并同时处理此广播。

同理,应用可以注册接收来自其他应用(例如相机)的隐式ACTION_NEW_PICTUREACTION_NEW_VIDEO广播。当用户使用相机应用拍摄照片时,这些应用即会被唤醒以处理广播。

为减缓这些问题,Android N 应用了以下优化措施:

  • 面向 Android N 开发的应用不会收到CONNECTIVITY_ACTION广播,即使它们已有清单条目来请求接受这些事件的通知。在前台运行的应用如果使用BroadcastReceiver请求接收通知,则仍可以在主线程中侦听CONNECTIVITY_CHANGE
  • 应用无法发送或接收ACTION_NEW_PICTUREACTION_NEW_VIDEO广播。此项优化会影响所有应用,而不仅仅是面向 Android N 的应用。

未来的 Android 版本还可能会弃用其他隐式广播以及未绑定的后台服务。有鉴于此,您应避免依赖在清单文件中声明的接收器来侦听隐式广播或删除此依赖关系,以及避免或删除对后台服务的依赖关系。

Android 框架提供多种解决方案来降低这些隐式广播或后台服务的必要性。例如,JobSchedulerAPI 提供了一个稳健可靠的机制来安排满足指定条件(例如连入不按流量计费的网络)时所执行的网络操作。您甚至可以使用JobScheduler来响应内容提供程序所发生的变更。

如需了解有关此行为变更及如何改写应用的详细信息,请参阅后台优化。

权限更改


Android N 做了一些权限更改,包括用户帐户权限和向外部存储设备写入信息的新权限,这些更改可能会影响您的应用。下面概要列出了预览版中已发生更改的权限。

GET_ACCOUNTS(已弃用)

GET_ACCOUNTS 权限现已弃用。对于面向 Android N 的应用,系统将忽略此权限。

辅助工具改进


为提高平台对于视力不佳或视力受损用户的可用性,Android N 做出了一些更改。这些更改一般并不要求更改您的应用代码,不过您应仔细检查并使用您的应用测试这些功能,以评估它们对用户体验的潜在影响。

屏幕缩放

Android N 支持用户设置显示尺寸,以放大或缩小屏幕上的所有元素,从而提升设备对视力不佳用户的可访问性。用户无法将屏幕缩放至低于最小屏幕宽度sw320dp,该宽度是 Nexus 4 的宽度,也是常规中等大小手机的宽度。

免费米思米标准件下载
【点击进入】

米思米标准件下载免费,45万种标准件全覆盖, 3步操作生成2D/3D模型,效率提升50%!

查 看

免费米思米标准件下载
【点击进入】

米思米标准件下载免费,45万种标准件全覆盖, 3步操作生成2D/3D模型,效率提升50%!

查 看

图 3.右侧屏幕显示的是一台运行 Android N 系统映像的设备增大显示尺寸后的效果。

当设备密度发生更改时,系统会以如下方式通知正在运行的应用:

  • 如果是面向 API 级别 23 或更低版本系统的应用,则系统会自动终止其所有后台进程。这意味着如果用户切换离开此类应用,转而打开Settings屏幕并更改Display size设置,则系统会像处理内存不足的情况一样终止该应用。如果应用具有任何前台进程,则系统会如处理运行时变更中所述将配置变更通知给这些进程,就像对待设备屏幕方向变更一样。
  • 如果是面向 Android N 的应用,则其所有进程(前台和后台)都会收到有关配置变更的通知,如处理运行时变更中所述。

大多数应用并不需要进行任何更改即可支持此功能,不过前提是这些应用遵循 Android 最佳实践。具体要检查的事项:

  • 在屏幕宽度为sw320dp的设备上测试您的应用,并确保其充分运行。
  • 当设备配置发生变更时,更新任何与密度相关的缓存信息,例如缓存位图或从网络加载的资源。当应用从暂停状态恢复运行时,检查配置变更。

    注:如果您要缓存与配置相关的数据,则最好也包括相关元数据,例如该数据对应的屏幕尺寸或像素密度。保存这些元数据便于您在配置变更后决定是否需要刷新缓存数据。

  • 避免用像素单位指定尺寸,因为像素不会随屏幕密度缩放。应改为使用与密度无关像素(dp) 单位指定尺寸。

设置向导中的视觉设置

Android N 在“Welcome”屏幕中加入了“Vision Settings”,用户可以在新设备上设置以下辅助工具设置:Magnification gestureFont sizeDisplay sizeTalkBack。此项变更增强了与不同屏幕设置相关的错误的可见性。要评估此功能的影响,您应在启用这些设置的状态下测试应用。您可以在Settings > Accessibility中找到这些设置。

NDK 应用链接至平台库


Android N 做了一些命名空间更改,以阻止加载非公开 API。如果您使用 NDK,则只能使用 Android 平台提供的公开 API。在下一个官方发布的 Android 版本上使用非公开 API 会导致应用崩溃。

为提醒您使用了非公开 API,在 Android N 设备上运行的应用会在有应用调用非公开 API 时在日志消息输出中生成一个错误。此错误还会作为消息显示在设备屏幕上,以帮助增强您对此情况的认识。您应检查应用代码以删除使用非公开平台 API,并使用预览版设备或模拟器全面测试应用。

如果您的应用依赖平台库,则请参见 NDK 文档,了解使用公开 API 等效项替换普通私有 API 的典型修复。您还可以链接至平台库,而无需实现此应用,如果应用使用的库是平台的一部分(例如libpng),但不属于 NDK,则更可如此。此情况下,请确保您的 APK 包含您打算链接到的所有 .so 文件。

注意:有些第三方库可能会链接至非公开 API。如果您的应用使用这些库,那么当您的应用在下一个官方发布的 Android 版本上运行时可能会出现崩溃现象。

应用不应依赖或使用不属于 NDK 的原生库,因为这些库可能会发生更改或从一个 Android 版本迁移至另一版本。例如,从 OpenSSL 切换至 BoringSSL 即属于此类更改。此外,不同的设备可能提供不同级别的兼容性,因为不属于 NDK 中的平台库没有兼容性要求。如果您必须在较旧设备上访问非 NDK 库,则请依据 Android API 级别进行加载。

为帮助您诊断此类问题,下面列举了一些在您试图使用 Android N 开发应用时可能遇到的 Java 和 NDK 错误:

Java 错误示例:

?
1
2
java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so"
    is not accessible for the namespace "classloader-namespace"

NDK 错误示例:

?
1
dlopen failed: cannot locate symbol "__system_property_get" referenced by ...

以下是遇到这类错误的应用的一些典型修复:

  • 可以使用标准 JNI 函数来替代使用 libandroid_runtime.so 中的 getJavaVM 和 getJNIEnv:

    ?
    1
    2
    3
    4
    AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h>
    AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or
    JavaVM::AttachCurrentThread from <jni.h>.
    </jni.h></jni.h>

  • 可以使用公开备选项__system_property_get来替代使用libcutils.so中的property_get符号。如需这样做,请使用__system_property_get及以下 include 函数:
    ?
    1
    #include <sys system_properties.h=""></sys>
  • 应使用应用本地版本来替代使用libcrypto.so中的SSL_ctrl符号。例如,您应在.so文件中静态链接libcyrpto.a,或者在应用中包含您自己的来自 BoringSSL 或 OpenSSL 的动态libcrypto.so

Android for Work


Android N 包含一些针对面向 Android for Work 的应用的变更,包括对证书安装、密码重置、二级用户管理、设备标识符访问权限的变更。如果您是要针对 Android for Work 环境开发应用,则应仔细检查这些变更并相应地修改您的应用。

  • 您必须先安装授权证书安装程序,然后 DPC 才能对其进行设置。对于面向 N SDK 的配置文件和设备所有者应用,您应在设备策略控制器 (DPC) 调用DevicePolicyManager.setCertInstallerPackage()之前安装授权证书安装程序。如果尚未安装此安装程序,则系统会引发IllegalArgumentException
  • 针对设备管理员的重置密码限制现在也适用于配置文件所有者。设备管理员无法再使用DevicePolicyManager.resetPassword()来清除或更改已经设置的密码。不过,设备管理员仍可以设置密码,但只能在设备没有密码、PIN 或图案时这样做。
  • 即使设置了限制,设备所有者和配置文件所有者仍可以管理帐户。而且,即使具有DISALLOW_MODIFY_ACCOUNTS用户限制,设备所有者和配置文件所有者仍可调用 Account Management API。
  • 设备所有者可以更轻松地管理二级用户。当设备在设备所有者模式下运行时,系统将自动设置DISALLOW_ADD_USER限制。这样可以防止用户创建非托管二级用户。此外,CreateUser()createAndInitial()方法已弃用,取而代之的是DevicePolicyManager.createAndManageUser()方法。
  • 设备所有者可以访问设备标识符。设备所有者可以使用DevicePolicyManagewr.getWifiMacAddress()访问设备的 Wi-Fi MAC 地址。如果设备上从未启用 Wi-Fi,则此方法将返回一个null值。

如需了解有关 Android N 中针对 Android for Work 所做变更的详细信息,请参阅Android for Work 更新。

其他重要说明


  • 如果一个应用在 Android N 上运行,但却是针对更低 API 级别开发的,那么在用户更改显示尺寸时,系统将终止此应用进程。因此,应用必须能够正常处理此情景。否则,当用户从最近使用记录中恢复运行应用时,应用将会出现崩溃现象。

    您应测试应用以确保不会发生此行为。要进行此测试,您可以通过 DDMS 手动终止应用,以造成相同的崩溃现象。

    在密度发生更改时,系统不会自动终止面向 N 及更高版本的应用;不过,这些应用仍可能对配置变更做出不良响应。

  • Android N 上的应用应能够正常处理配置变更,并且在后续启动时不会出现崩溃现象。您可以通过更改字体大小 (Setting>Display>Font size) 并随后从最近使用记录中恢复运行应用,来验证应用行为。

Android N Preview 行为变更相关推荐

  1. Android 12的行为变更和版本兼容思路

    一年一度的产品线兼容活动又开始了.Android系统每更新一次系统,对开发者而言都是持续而漫长的挑战. 自15年6.0的兼容以来,每年给公司产品线app做版本兼容,成了我每年的保留节目-- 结束完产品 ...

  2. Android应用基础知识(4)---Android处理运行时变更

    Android处理运行时变更 有些设备配置可能会在运行时发生变化(例如屏幕方向.键盘可用性及语言). 发生这种变化时,Android 会重启正在运行的 Activity(先后调用 onDestroy( ...

  3. android 8.0 行为变更--day03

    Android 8.0 除了提供诸多新特性和功能外,还对系统和 API 行为做出了各种变更.本文重点介绍您应该了解并在开发应用时加以考虑的一些主要变更. 其中大部分变更会影响所有应用,而不论应用针对的 ...

  4. Android 7.0 行为变更 通过FileProvider在应用间共享文件吧

    本文转自张鸿洋的博客 http://blog.csdn.net/lmj623565791/article/details/72859156 一.概述 之前项目的新特性适配工作都是同事在做,一直没有怎么 ...

  5. Android 8.0 行为变更

    来自官网:https://developer.android.google.cn/about/versions/oreo/android-8.0-changes.html#atap Android 8 ...

  6. Android 13 返回导航大变更,返回键彻底废弃 + 可预见型返回手势

    /   今日科技快讯   / 据外国媒体报道,马斯克计划裁撤推特约3700个岗位,这占到这家社交媒体公司员工总数的一半,目的是在其440亿美元的收购案之后降低成本.此外,马斯克还打算取消公司现行的远程 ...

  7. Android 7.0 行为变更

    电池和内存 Android 7.0 包括旨在延长设备电池寿命和减少 RAM 使用的系统行为变更.这些变更可能会影响您的应用访问系统资源,以及您的应用通过特定隐式 intent 与其他应用交互的方式. ...

  8. 【官网原文】Android 7.0 行为变更

    Android 7.0(官网原文地址) 除了提供诸多新特性和功能外,还对系统和 API 行为做出了各种变更.本文重点介绍您应该了解并在开发应用时加以考虑的一些主要变更. 如果您之前发布过 Androi ...

  9. android 布局preview 技巧

    最近开始看老外写的文章,博客,嗯,不能说比国人写的好,但是感觉看着很爽.真的,一手资料就是爽. 嗯,自己做得不错,第一次看外文博客,我知道自己怎么看的,一句话一句话看下来的,越看越有感觉. 下面这个 ...

最新文章

  1. android 蓝牙找不到电脑,Android6.0 蓝牙搜索不到设备原因
  2. 从Qcheck 1.3 不能在不同操作系统上运行问题(chro124、chro342)说开来------
  3. 阿里云服务centOS7下安装rabbitmq
  4. 一行Java代码实现获取上传文件的后缀名
  5. 微信小程序_wxml学习
  6. 软件工程 / 为什么基于接口而非实现编程?
  7. 初等数论及其应用——中国剩余定理
  8. c语言程序设计案例教程肖利群,C语言程序设计案例教程
  9. iOS开发之oc(五)--成员变量(实例变量)
  10. 编译原理基础---思维导图
  11. 安装CentOS 6/7
  12. Ubuntu 16.04 远程桌面
  13. VS2003项目转VS2008项目
  14. 大华管理平台用户名_助力制造苏州紫光云引擎携手大华精密,共建精密机加数字化样板工厂...
  15. 古体字与简体字对照表_简体字和繁体字对照表
  16. 15b万用表怎么测电容_FLUKE-15B+型数字万用表操作规程
  17. 梦幻手游网页版校验服务器失败,梦幻神域手游服务器验证失败进不去解决办法...
  18. LibreOJ 2060 食物链
  19. Word标题设置快捷键
  20. 【从本人QQ空间迁移】重构“依恋情结”(以黑名单的新增编辑为例)

热门文章

  1. kylin的cube的原理
  2. DeleteFile()函数的正确使用(呼,解决了个小麻烦)
  3. 注册D8读卡器COM组件
  4. Microbiome:长江中浮游和底栖硅藻的生物地理模式
  5. 零基础大数据该学什么? 1
  6. 金山打字通WINDOWS XP及WINDOWS 2003下安装后普通用户无法使用的问题
  7. 求助:无线键鼠套装无法使用
  8. 绘图配色软件 - ColorSchemer Studio
  9. 小学生的噩梦——c++算术考验程序
  10. android仿iphone日期时间选择器,Android仿iPhone日期时间选择器详解