从开发者角度来看,Android N 的更新并不算大。网上之前流传的一些 Android N 可能出现的新特性,什么夜间模式,抽屉の消失,指纹识别接口什么的,目前来看很多都没有,现在看朋友圈转的好几篇文章更像是作者在贤者模式下的意淫。
Android N 的新特性
废话不多说,我来盘点下 Android N 的新特性,同时分析下开发者角度下的 Android N。
Multi-Window Support (分屏多窗口支持)
简单来说,就是屏幕上可以出现多个多个程序。想想你平时看视频的时候来了微信消息的时候,你得退出视频App,切到微信,回复消息,然后再切回来重新缓冲… 这是一个多么蛋疼的设定...
有了 Android N 以后,这个问题迎刃而解!
全新的 Android N 下将支持两种新的窗口模式:
- Side-By-Side 模式:两个 App 瓜分一个屏幕
- One-above-the-other 模式:一个 App 浮动在另一个 App 之上
在 Android N TV 上,还将支持 Picture-in-picture (画中画) 模式,用户在浏览其他 App 的时候,视频可以浮动在屏幕上。
大致效果就是下面这个样子的:
对开发者而言,想要支持多窗口也很简单,只需要在 AndroidManifest 文件里加上一个属性即可:
android:resizeableActivity=["true" | "false"]
Direct Replay & Bundle Notifications (快捷回复和归拢通知)
快捷回复
新的 Android N 目测是借鉴了 iOS 里的快速回复功能,用户将可以在通知栏里快速回复消息,邮件等通信信息。对于商务人士和爱好打游戏的玩家来说,是个很赞的功能。
快速回复截图
归拢通知
邮件和 IM 类的 App 总是会在短时间内发来很多通知,在此之前,所有的通知栏是相互独立的,这些新到的通知占用了很多空间,却只能显示有限的信息。归拢通知就是把这些通知归拢起来,逻辑性更强,展示的也会更多。另外一大好处可能就是,用户可以一键消除掉所有同一个 App 发来的通知。个人感觉这个功能比 iOS 要先进一些,很多人的 iOS 通知栏里肯定存在着很对微信的通知对吧...
对开发者而言,全新的通知体系允许开发者更灵活的自定义通知的 UI(View)。具体细节看这里。
Data Saver (节约数据)
Android N 增加了一个系统级的控制开关:节约数据。
其实这个设定是一个中间设定,因为目前对于网络数据只有开和关两种属性,但有的时候,比如我们月底 4G 数据套餐快用光了,学生在宿舍用着收费的 Wifi,又或者出国漫游,在这些场景下,我们既想开着移动数据,又想告诉所有的 App,我当前的流量是有限的,大家不要用太多。当 App 在收到这个通知后,就会尽可能的减少网络请求,节省用户流量。
可以看得出,这是一个很人性化而且实用的功能,给 Android 的 PM 点个赞。这个功能目前在 iOS 上是没有的,但在 Windows 10 上是有的,不过那个名字起得略微俗气,在网络里有一项叫:我当前使用的是收费网络。
这个功能的普及可能需要一段时间,所以早期不能完全指望开发者给你节省流量,更何况是国内各大厂的 App,所以不要忘了在流量不够的时候,开启流量黑白名单。
对于开发者而言
接下来的一部分,是 Android N 在 SDK 方面的一些提升。个人感觉没多少,而且不痛不痒,毕竟国内现在 Android 5.0 的统一大业都还差得很远。
对于开发者们而言,最大的利好,莫过于:
支持 Java 8
Android N 开始支持 Java 8 了,很酸爽对吧!终于扯掉了老奶奶的裹脚布!终于要迈开步子写代码了!终于能够时尚一把了!
很多 Geek 开发者为了 Java 中的 Lambda 表达式,折腾来折腾去的 Retrolambda 也即将要退出历史舞台了。 Kotlin 一贯标榜的便利,失色三分了。今天起,我也要开始学习 Java 8 了。
Jack ( Java Android Compiler Kit )全新的编译工具集
Jack 最大最大的优点,你不用再操心 65K 方法限制的问题了! Jack 在 Compile 的时候就已经解决了!『65k 方法限制』将成为过去式中存在的名词了。
其他的一些变化:
- 速度(每次都会提升速度
- Library File 的后缀(变成了 .jack
Background Optimizations(后台优化)
Android N 为了节约内存和电量,移除了三种广播通知。移除的三种分别是:
- ACTION_NEW_PICTURE:拍摄了新的图片
- ACTION_NEW_VIDEO:拍摄了新的视频
- CONNECTIVITY_ACTION: 用户网络发生变化
当我看到这些的时候,脑子里第一想法居然是好爽,那些国内的推送服务药丸!!推送服务又少了三种最有用的唤醒!!哈哈哈哈哈哈
不过对开发者来说影响还好,乍一看,CONNECTIVITY_ACTION 可能会影响比较大,但是官方给出了一个替代方案,想要接收网络变化的 App 需要注册一个 CONNECTIVITY_CHANGE 事件,当用户手机网络发生变化的时候,只有 App 正在运行的时候,才能收到 CONNECTIVITY_CHANGE 的回到,如果 App 已经被干掉,那么是不会回调的。这样既避免了网络变化监听的功能性缺失,又节约了用户电量,减少了唤醒。对国内第三方推送服务也是沉重的一击。
官方对 ACTION_NEW_PICTURE 和 ACTION_NEW_VIDEO 移除,也提供了缓和之计。就是使用 JobScheduler
这也是 Android 团队安利已久的一个定时任务方案,大家不要辜负了 Android 开发团队的一番苦心,快去读读文档,争取在下个项目里用上。
而且官方还说了,未来,很会广播机制都会有所改动。所以... 国内的 Android 目测也会越来越好用,国内无良厂商们能玩儿花样也会越来越少。撒花。
同时:
adb
里也增加了测试 后台服务 不可用的命令,方便开发者做测试:
禁用后台服务:
$ adb shell cmd appops set RUN_IN_BACKGROUND ignore
重新启用:
$ adb shell cmd appops set RUN_IN_BACKGROUND allow
Scoped Directory Access (特定文件夹权限)
有的时候,App 可能只需要读写特定文件夹,在此之前,你得申请 READ_EXTERNAL_STORAGE或者 WRITE_EXTERNAL_STORAGE的权限,这个权限会让用户很不放心而且对于心怀鬼胎的 App,没准也会瞎搞,新的体系下,App 可以申请一个特定文件夹的权限来证明自己的清白。
做个干干净净的 App,就用这个特性吧!
Language and Locale (语言和地区)
Android N 里用户可以选择多种地区。比如你会中文和日语,就是不会英语。你就可以同时选择中国和日本。这样 App 显示语言的顺序将会是中文,没有中文优先显示日文,而非现在的一旦找不到语言包,就默认选择了英语。
Direct Boot (直接启动)
用户在开机但是还未解锁的情况下,很多 App 是无法启动的,这会导致一些问题,比如...你设置的第三方闹钟可能没响,你的微信可能收不到通知... Android N 下可以申请在开机未解锁情况下直接启动。
TV Recording(TV 录制)
这是 Android N TV 上的一个提升,允许 App 录制 TV 信号视频,很爽的,比如你在加班,而冰火第六季已然已经开演,先让 TV 录下来,回去再看…就酱...