一、 当设备处于充电状态且屏幕已关闭必定时间后,设备会进入低电耗模式并应用第一部分限制:关闭应用网络访问、推迟做业和同步。若是进入低电耗模式后设备处于静止状态达到必定时间,系统则会对 PowerManager.WakeLock、AlarmManager 闹铃、GPS 和 WLAN 扫描应用余下的低电耗模式限制。不管是应用部分仍是所有低电耗模式限制,系统都会唤醒设备以提供简短的维护时间窗口,在此窗口期间,应用程序能够访问网络并执行任何被推迟的做业/同步。html
二、 面向 Android 7.0 开发的应用不会收到CONNECTIVITY_ACTION广播,即便它们已有清单条目来请求接受这些事件的通知。在前台运行的应用若是使用BroadcastReceiver请求接收通知,则仍能够在主线程中侦听CONNECTIVITY_CHANGE。java
三、 应用没法发送或接收ACTION_NEW_PICTURE或ACTION_NEW_VIDEO广播。此项优化会影响全部应用,而不只仅是面向 Android 7.0 的应用。android
四、 私有文件的文件权限不该再由全部者放宽,为使用MODE_WORLD_READABLE和/或MODE_WORLD_WRITEABLE而进行的此类尝试将触发SecurityException。算法
五、 传递软件包网域外的file://URI 可能给接收器留下没法访问的路径。所以,尝试传递file://URI 会触发FileUriExposedException。分享私有文件内容的推荐方法是使用FileProvider。api
六、 DownloadManager再也不按文件名分享私人存储的文件。旧版应用在访问COLUMN_LOCAL_FILENAME时可能出现没法访问的路径。面向 Android 7.0 或更高版本的应用在尝试访问COLUMN_LOCAL_FILENAME时会触发SecurityException。经过使用DownloadManager.Request.setDestinationInExternalFilesDir()或DownloadManager.Request.setDestinationInExternalPublicDir()将下载位置设置为公共位置的旧版应用仍能够访问COLUMN_LOCAL_FILENAME中的路径,可是咱们强烈反对使用这种方法。对于由DownloadManager公开的文件,首选的访问方式是使用ContentResolver.openFileDescriptor()。安全
七、 Android 7.0 在“Welcome”屏幕中加入了“Vision Settings”,用户能够在新设备上设置如下无障碍功能设置:Magnification gesture、Font size、Display size和话语提示。此项变动让您能够更容易发现与不一样屏幕设置有关的错误。要评估此功能的影响,您应在启用这些设置的状态下测试应用。您能够在Settings > Accessibility中找到这些设置。网络
八、 从 Android 7.0 开始,系统将阻止应用动态连接非公开 NDK 库,这种库可能会致使您的应用崩溃。此行为变动旨在为跨平台更新和不一样设备提供统一的应用体验。即便您的代码可能不会连接私有库,但您的应用中的第三方静态库可能会这么作。所以,全部开发者都应进行相应检查,确保他们的应用不会在运行 Android 7.0 的设备上崩溃。若是您的应用使用原生代码,则只能使用公开 NDK API。app
九、 全部应用在调用既非公开又不可暂时访问的 API 时都会生成一个运行时错误。结果就是System.loadLibrary和dlopen(3)同时返回NULL,并可能致使您的应用崩溃。您应检查应用代码以移除对私有平台 API 的使用,并使用预览版设备或模拟器全面测试应用。若是您不肯定您的应用是否使用私有库,您能够检查 logcat以识别运行时错误。ide
十、 若是一个应用在 Android 7.0 上运行,但倒是针对更低 API 级别开发的,那么在用户更改显示尺寸时,系统将终止此应用进程。应用必须可以妥善处理此情景。不然,当用户从最近使用记录中恢复运行应用时,应用将会出现崩溃现象。测试
十一、 您应测试应用以确保不会发生此行为。要进行此测试,您能够经过 DDMS 手动终止应用,以形成相同的崩溃现象。
十二、 在密度发生更改时,系统不会自动终止面向 N 及更高版本的应用;不过,这些应用仍可能对配置变动作出不良响应。
1三、 Android 7.0 上的应用应可以妥善处理配置变动,而且在后续启动时不会出现崩溃现象。您能够经过更改字体大小 (Setting>Display>Font size) 并随后从最近使用记录中恢复运行应用,来验证应用行为。
1四、 因为以前的 Android 版本中的一项错误,系统未能将对主线程上的一个 TCP 套接字的写入操做举报为违反严格模式。Android 7.0 修复了此错误。呈现出这种行为的应用如今会引起android.os.NetworkOnMainThreadException。通常状况下,咱们不建议在主线程上执行网络操做,由于这些操做一般会出现可能致使 ANR 和卡顿的高尾延迟。
1五、 Debug.startMethodTracing()方法系列如今默认在您的共享存储空间上的软件包特定目录中存储输出,而非 SD 卡根目录。这意味着应用再也不须要请求WRITE_EXTERNAL_STORAGE权限来使用这些 API 。
1六、 许多平台 API 如今开始检查在Binder事务间发送的大负载,系统如今会将TransactionTooLargeExceptions做为RuntimeExceptions再次引起,而再也不只是默默记录或抑制它们。一个常见例子是在Activity.onSaveInstanceState()上存储过多数据,致使ActivityThread.StopInfo在您的应用面向 Android 7.0 时引起RuntimeException。
1七、 若是应用向View发布Runnable任务,而且View未附加到窗口,系统会用View为Runnable任务排队;在View附加到窗口以前,不会执行Runnable任务。此行为会修复如下错误:
1八、 若是一项应用是从并不是预期窗口 UI 线程的其余线程发布到View,则Runnable可能会所以运行错误的线程。
1九、 若是Runnable任务是从并不是环路线程的其余线程发布,则应用可能会曝光Runnable任务。
20、 若是 Android 7.0 上一项有DELETE_PACKAGES权限的应用尝试删除一个软件包,但另外一项应用已经安装了这个软件包,则系统须要用户进行确认。在这种状况下,应用在调用PackageInstaller.uninstall()时预计的返回状态应为STATUS_PENDING_USER_ACTION。
2一、 名为Crypto的 JCA 提供程序已弃用,由于它仅有的 SHA1PRNG 算法为弱加密。应用没法再使用 SHA1PRNG(不安全地)派生密钥,由于再也不提供此提供程序。如需了解详细信息,请参阅博文Android N 中已弃用“Crypto”安全提供程序。