上篇介绍了多窗口模式与消息推送的相关内容。这篇继续往下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系统中要主动检查用户是否开启了流量节省程序,并注意节约后台时的数据流量消耗。如果确实需要在后台使用数据流量,也要注意引导用户放开对本应用的限制,将你的应用加入白名单。
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录制,如果想了解具体的变更内容,可以查看相应文档。