您的位置:首页 > 移动开发 > Android开发

Android N For Developers 笔记(二)

2016-04-15 16:26 399 查看
上篇介绍了多窗口模式与消息推送的相关内容。这篇继续往下note:

Profile-guided JIT/AOT compilation

Android N系统在ART中加入了JIT(Just In Time)编译器,JIT是对以前的AOT(Ahead Of Time)的补充,加入JIT后系统性能得到提升,节约了存储空间,更主要的优点是App的安装、运行、版本更新以及系统的更新速度都得到提升。
然后,在Android N中新的编译工具集再也不用担心

Doze 模式增强版、后台优化

这两个具体可以看之前的那篇 Android N Behavior Changes 笔记

流量节省程序(Data Saver)

Android N中提供了一个全局的流量控制机制,目的自然是为了防止应用程序在后台恶意偷跑宝贵的移动流量。这个功能是默认关闭的,一旦开启之后除了GMS(Google Mobile Service,谷歌移动服务)外,其他应用都是默认不允许在后台使用超过前台所消耗的移动流量。

Data Saver 为用户提供了白名单,被用户列入白名单的应用即使是在Data Saver开启的状态下也不受流量限制的影响。

  对于开发者而言,在Android N系统中要主动检查用户是否开启了流量节省程序,并注意节约后台时的数据流量消耗。如果确实需要在后台使用数据流量,也要注意引导用户放开对本应用的限制,将你的应用加入白名单。
系统提供的ConnectivityManagerAPI可能会有所帮助:
调用其getRestrictBackgroundStatus()方法会返回以下三个值:
RESTRICT_BACKGROUND_STATUS_DISABLED:流量控制程序未开启
RESTRICT_BACKGROUND_STATUS_ENABLED:流量控制程序已开启
RESTRICT_BACKGROUND_STATUS_WHITELISTED:流量控制程序已开启,但应用处于白名单,流量不受限

ConnectivityManager connMgr = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
// Checks if the device is on a metered network
if (connMgr.isActiveNetworkMetered()) {
// Checks user’s Data Saver settings.
switch (connMgr.getRestrictBackgroundStatus()) {
case RESTRICT_BACKGROUND_STATUS_ENABLED:
// Background data usage is blocked for this app. Wherever possible,
// the app should also use less data in the foreground.

case RESTRICT_BACKGROUND_STATUS_WHITELISTED:
// The app is whitelisted. Wherever possible,
// the app should use less data in the foreground and background.

case RESTRICT_BACKGROUND_STATUS_DISABLED:
// Data Saver is disabled. Since the device is connected to a
// metered network, the app should use less data wherever possible.
}
} else {
// The device is not on a metered network.
// Use data as required to perform syncs, downloads, and updates.
}


应用要根据返回状态做好相应的处理。

如果需要监听用户对流量控制程序修改,可以注册一个
ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED
(
"android.net.conn.RESTRICT_BACKGROUND_CHANGED"
广播,并动态注册receiver来接收该广播,接到后调用ConnectivityManager.getRestrictBackgroundStatus()来确定是否自己的应用被修改。

从命令行的角度,Android N提供了下列指令用于查询和配置网络权限:
$ adb shell dumpsys netpolicy :返回当前整个后台网络限制设置、当前在白名单内的应用包名及其他已知的包。
$ adb shell cmd netpolicy:显示Network Policy Managersuo的所有指令
$ adb shell cmd netpolicy set restrict-background <boolean>:查询流量控制程序是否开启
$ adb shell cmd netpolicy add restrict-background-whitelist <UID>:将指定的应用包(UID)加入白名单
$ adb shell cmd netpolicy remove restrict-background-whitelist <UID>:将指定的应用包(UID)移出白名单

其他的几个点,如访问特定文件夹权限,支持Java 8,语言与地区选择上的优化,及TV录制,如果想了解具体的变更内容,可以查看相应文档。

Scoped Directory Access

TV Recording

Java 8 Language Features

ICU4J Android Framework APIs

Network Security Configuration

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: