1. 多窗口MultiWindow

多窗口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的改进

  1. 通知消息分组:比较好理解,同一个组的消息在UI展示上归类到一起;

  2. 添加快速回复功能:通知在预览的时候可以直接回复,系统通知栏提供了一个简单的输入区域;

  3. 可以选择是否隐藏时间:之前的通知栏都是带时间的,现在可由App自己控制是否需要展现通知消息右下角的时间。

3. 省电相关 - Doze和后台任务优化

先说后台任务优化,不知道大家在开发中没有自己去接收过ConnectivityManager这个系统服务的connectivity_change广播,这个广播是用的最广泛的,同时也是最容易被滥用的。如果应用中没有设计一个统一的地方接收系统广播然后在应用内分发,在单个应用内就会有多个监听的情况。由于是系统广播,如果用户打开的App较多,网络发生变化时,系统要唤起App来执行一段代码。但是这时候应用其实不可见的,这里浪费了较多的电量。

类似的场景还有很多,比如使用系统相机拍照后系统会发出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的改动

    1. NDK的编译也要抛弃Makefile转而采用Gradle;

    2. 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

Android N 新特性 + APP开发注意事项的更多相关文章

  1. 腾讯云安全:开发者必看|Android 8.0 新特性及开发指南

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 背景介绍 谷歌2017 I/O开发者大会今年将于5月17-19日在美国加州举办.大会将跟往年一样发布最新的 A ...

  2. 开发者必看|Android 8.0 新特性及开发指南

    背景介绍 谷歌2017 I/O开发者大会今年将于5月17-19日在美国加州举办.大会将跟往年一样发布最新的 Android 系统,今年为 Android 8.0.谷歌在今年3 月21日发布 Andro ...

  3. Android N 新特性

    2016年5月19日,谷歌在美国加州的山景城举办了 Google I/O 开发者大会中发布.2016年6月,Android N正式命名为“牛轧糖” 本届I/O开发者大会上,Google重点介绍了And ...

  4. 可能是最早的学习Android N新特性的文章

    可能是最早的学习Android N新特性的文章 Google在今天放出了Android N开发者预览版.Android N支持Nexus6及以上的设备.5太子Nexus5不再得到更新. Android ...

  5. Android O新特性和行为变更总结zz

    https://mp.weixin.qq.com/s/Ezfm-Xaz3fzsaSm0TU5LMw Android O 行为变更https://developer.android.google.cn/ ...

  6. android软件简约记账app开发day10-主页面模块--头信息的展示,和之后功能完善的目标。

    android软件简约记账app开发day10-主页面模块--头信息的展示,和之后功能完善的目标. 今天来写主界面头信息的展示,也就是将第一天的写的layout中的item_main_top展示到主界 ...

  7. android软件简约记账app开发day09-主页面模块,收支记账信息的展示

    android软件简约记账app开发day09-主页面模块,收支记账信息的展示 我们第一天已经绘制了记账条目的界面,也在主界面设置了LietView来展示记账条目,今天来实现记账后再主界面的展示效果 ...

  8. android软件简约记账app开发day08-时间对话框的书写+改bug,改bug

    android软件简约记账app开发day08-时间对话框的书写+改bug,改bug 绘制对话跨页面 在添加记账信息功能中,我提供了用户添加备注添加事件的功能,设计是点击时间会弹出一个时间对话框供用户 ...

  9. android软件简约记账app开发day07-备注界面完善

    android软件简约记账app开发day07-备注界面完善 ## 昨天我们已经绘制了备注页面,今天来用Java代码组装完善一下. 首先我们新建BeiZhuDialog类关联备注页面,并且实现点击接口 ...

随机推荐

  1. 当webshell不可执行cmshell时 (菜刀的安全模式!)可用此脚本突破执行cmd命令

    <?php /* ============== */ error_reporting(0); ini_set('max_execution_time',0); // -------------- ...

  2. CCP浅谈

    说明 如果想详细了解CCP,可以下载AN-AMC-1-102_Introduction_to_CCP.pdf或者ccp211.pdf 本文不涉及到专业的知识讲解,如果想查看更加专业的知识可以选择看完以 ...

  3. 如何给zencart安装image handler插件?

    以下内容均为个人的工作总结,有错误的理解都很正常,所以提醒您,可以参考,但是由此造成的一切后果,本人概不负责. 1 去zencart官网下载一个插件包(注意版本是否匹配相应的zencart版本,我的是 ...

  4. 1.4---字符串空格变成20%(CC150)

    import CtCILibrary.AssortedMethods; public class Question { // Assume string has sufficient free spa ...

  5. MFCC可视化

    大多数文章和博客介绍都是MFCC的算法流程,物理意义,这里仅仅从数据分布可视化的角度,清晰 观察MFCC特征在空间中的分布情况,加深理解. MFCC处理流程: MFCC参数的提取包括以下几个步骤: 1 ...

  6. Objective C 快速入门学习二

    Objective-C 类.对象.方法 1.编写一个复数类: #import <Foundation/Foundation.h>@interface Complex: NSObject / ...

  7. Javascript 面向对象

    面向对象语言的标识:类的概念. ECMAScript中没有类的概念,因此他的对象与基于类的语言中的对象有所不同. ECMA-262把对象定义为:无序属性的集合,其属性可以包含基本值.对象.函数.我们可 ...

  8. web.config中配置页面出错后跳转指定错误页面

    每当用户访问错误页面时,会出现不友好的404错误,所以为了防止这种不友好,我们在web.config中的<system.web>节点下配置 <customErrors>,在出现 ...

  9. Debian 配置apt-get源

    1.配置apt-get源 cp  /etc/apt/sources.list  /etc/apt/sources.listbak   #备份原有配置文件       nano  /etc/apt/so ...

  10. 前端easyui的简化调用

    easyui近期一直都比较流行,虽然它在效果上被extjs爆了,它的使用难度低,在IE6下表现不错,的确受到了广泛企业程序员的好评. 但是他的API说明还是比较简陋的,刚上手可能还需要摸索一下,为什么 ...