1. 多窗口MultiWindowandroid
多窗口MultiWindow,这是Android N里对开发者影响比较大的特性,也是你们疑问比较多的地方。站在开发者的角度其实没必要太担忧这个特性会致使咱们须要修改不少代码来适配系统。Google的工程师们也不但愿这个特性致使不少应用出现问题,他们更但愿的是让应用都能无缝过分到Android N。据他们测试,目前Google市场中Top 200的应用只有极少数会出如今Android N上由于多窗口致使不能正常使用的状况。退一步讲,即便你的应用在Android N的多窗口模式下不能正常运行,能够在manifest中设置resizeableActivity为false,便可禁用多窗口模式,固然在Android N上这个值默认是true.网络
应用如要支持多窗口,也有一些须要注意的地方,最主要的是分辨率的适配。在多窗口模式下,应用的显示比例不必定是手机屏幕的比例。这里可能会影响到一些代码,好比有的应用一启动就全局存储屏幕的宽高,这在Android N下可能就有问题了,须要开发者作相应的修改。多窗口带来的另一个问题是对onStart()和onStop()的处理,在多窗口模式下,Activity的生命周期是不受影响的。可是原来进入onStop()后Activity就不可见了,在Android N中却仍是可见的,这一点在开发的时候须要考虑到。对于音视频的应用,应该把中止声音播放的代码从onPause()移到onStop()里,在onPause()的时候,因为整个应用对用户仍然可见,音视频播放不该该暂停。工具
另外值得一提的是画中画功能,画中画按照Google工程师的说法是专门为Android TV设计的。画中画可使一个Activity在播放视频的同时,在另一个中Activity进行其它操做。由于不少视频应用都须要作小窗播放的功能,目前的作法基本都是用Window Manager实现一个全局浮窗实现的。为此我和另一个视频应用的开发者向他们反馈其实在非Android TV平台也很须要这个功能,Window Manager自身也有许多缺点,好比OEM厂商会加入人为的限制,致使浮窗弹不出来,WindowManager只能加入最顶层的RootView。Google工程师回复使用这种方式实现画中画功能实际上是对系统的一种Hack,即并不是标准的手段,而画中画功能能够提供比较清晰的API,而且他们认为咱们提的这点确实是一个问题,他们会把这点反馈到开发团队。测试
2. 对Notification的改进优化
通知消息分组:比较好理解,同一个组的消息在UI展现上归类到一块儿;spa
添加快速回复功能:通知在预览的时候能够直接回复,系统通知栏提供了一个简单的输入区域;设计
能够选择是否隐藏时间:以前的通知栏都是带时间的,如今可由App本身控制是否须要展示通知消息右下角的时间。日志
3. 省电相关 - Doze和后台任务优化视频
先说后台任务优化,不知道你们在开发中没有本身去接收过ConnectivityManager这个系统服务的connectivity_change广播,这个广播是用的最普遍的,同时也是最容易被滥用的。若是应用中没有设计一个统一的地方接收系统广播而后在应用内分发,在单个应用内就会有多个监听的状况。因为是系统广播,若是用户打开的App较多,网络发生变化时,系统要唤起App来执行一段代码。可是这时候应用其实不可见的,这里浪费了较多的电量。blog
相似的场景还有不少,好比使用系统相机拍照后系统会发出NEW_VIDEO或者NEW_PHOTO的广播,若是你的应用如今处于后台,那么接收此类广播实际上是无心义的,只会浪费电量而已。
在Android N中,这类广播被取消了!实际上全部的隐式广播(Implicit Broadcast)未来都会逐步取消,在Android N中会先从上文提到的几个广播开始。取而代之的是JobScheduler,JobScheduler是你们把本身关注的事件和对应的操做注册进来,系统会按优先级去调用。若是你的应用在前台,那么你的任务会被运行,若是是后台,那么系统就不会跑你的代码了。这里说的比较通俗,实际系统会制定必定的策略来评估此类状况,更多关于这类广播的信息,能够查看Google的官方说明。
再说说Doze,Doze在Android N上是老树开新花,由于Doze在Android M上就已经有了。Android M上,在系统屏幕关闭且静止不动一段时间后,手机会进入Doze模式,只有极少数服务如GCM和加入了白名单的服务,能够保持运行,其它服务,每隔9分钟会有一个时间窗来执行代码。举个例子,若是你是一个闹铃应用,在不加入白名单的状况下。10:00进入Doze模式,若是闹钟设置在10:09,那么能够响,若是在10:08,对不起,闹钟就不能响了。在Android文档上提到能够用如下方式来申请Alarm不被Doze冻结,不过估计要系统签名的App才会生效,普通App应该是没用的。
注意,在Android M上Doze的触发条件是关屏且静止一段时间。在Android N上把Doze的应用范围扩大了,只要关屏就进入Doze模式,据Google工程师测试这样能够节省电量30%,这个改动对须要在后台作大量工做的应用影响不小。官方给出的解决方案是走Google官方的GCM通道,这个服务有特权不受Doze的影响,但在目前国内环境下这个方案用不了。Google的人说他们会推OEM厂商推出相似GCM的方案。App侧能作的就是提示用户把应用加入白名单,这个方案的成本很高。预计OEM厂商会提供相似手电筒那样的快捷开关,在须要的时候能够把Doze很方便的关闭掉。
Google还开发了battery-historian工具,能够根据系统生成的bug report,分析出详尽的耗电状况,测试同窗又多了一个利器。
现场的效果图,用此工具分析进入Doze模式后,电量消耗立刻变慢了(黑色曲线)。
4. 运行时权限
这个功能并不陌生,国内OEM的系统不少已经作了此功能。Android N此次加上去的是SD卡中内容的权限提示。好比你只须要访问某一个特定的文件夹,在此以前你要申请整个SD卡的读/写权限,据统计会有20%的用户会所以放弃安装你的App. Android N以后,你能够在App运行的过程当中申请针对某一个目录的权限。在提问环节,有同窗提出只是为了获取IMEI,Android对这个权限的提醒是读取手机的状态,这个权限提醒的太吓人,Google工程师说会把这个意见反馈上去,不过看样子大几率不会修改这里。
5. NDK的改动
NDK的编译也要抛弃Makefile转而采用Gradle;
NDK受限API采用更改Namespace的方式限制第三方调用,调用受限API会致使应用Crash.
参考文章:
北京Android N开发者会议见闻
http://mp.weixin.qq.com/s?__biz=MzI1MTA1MzM2Nw==&mid=2649796776&idx=1&sn=dc8e2d345b840ae4ec7b71c0bc775ea3&scene=1&srcid=0628FJySPxU8aDC3Ql8VspRR#wechat_redirect
如何适配适配 Android N
http://www.trinea.cn/android/android-n-adaptation/
支持系统级分屏功能:Android_7.0系统更新日志一览 - 新闻资讯 - 安卓中国http://www.anzhuo.cn/news/p_13924