Android N 新特性 + APP开发注意事项

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

 

转载于:https://www.cnblogs.com/bluestorm/p/5684150.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374339.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言开发笔记(六)实参和形参

举例说明 #include <stdio.h>void swap(int x, int y) {int temp 0;temp x;x y;y temp; }int main(void) {int a 1, b 2;swap(a, b);printf("a%d, b%d\n", a, b);return 0; }结果为 在函数调用时&#xff0c;a的值传给x&#xff0c;b的值传给y。执行完…

优化方案电子版_关于小区分支道路整修设计方案的讨论稿(No.2020121)

各位业主&#xff0c;大家好&#xff01; 关于绿洲比华利花园主干道翻新和次干道整修前期勘查和设计方案&#xff0c;经业委会及小区专家小组、设计单位申都设计公司工程设计人员结合本小区的实际情况进行了深入讨论&#xff0c;优化设计&#xff0c;形成如下三个独立方案&…

为什么有的开关电源需要加自举电容?

一、什么是自举电路&#xff1f; 1.1 自举的概念 首先&#xff0c;自举电路也叫升压电路&#xff0c;是利用自举升压二极管&#xff0c;自举升压电容等电子元件&#xff0c;使电容放电电压和电源电压叠加&#xff0c;从而使电压升高。有的电路升高的电压能达到数倍电源电压。…

VS2010报错 error:LINK1123:转换到COF期间失败,文件无限或损坏

右键工程-配置属性-清单工具-输入和输出&#xff0c;嵌入清单一项重新选择为否&#xff0c;如下图 修改后重新生成和运行&#xff0c;发现程序正常运行了。

springboot 整合mybatis_SpringBoot整合Mybatis、MybatisPuls

文末视频讲解SpringBoot的版本是2.2.0一、整合Mybatis1-1、引入pom文件<dependency> <groupId>mysqlgroupId> <artifactId>mysql-connector-javaartifactId> <version>8.0.19version> dependency> <dependency> &l…

为旧版代码创建存根–测试技术6

任何阅读此博客的人都可能已经意识到&#xff0c;目前我正在开发一个包含大量旧代码的项目&#xff0c;这些旧代码庞大&#xff0c;扩展且编写时从未进行过任何测试。 在使用此遗留代码时&#xff0c;有一个行为异常的类非常普遍&#xff0c;整个团队都一次又一次地犯错。 为了…

python性能解决_我们如何发现并解决Python代码中性能下降的问题

Python部落(python.freelycode.com)组织翻译&#xff0c;禁止转载&#xff0c;欢迎转发。 作者&#xff1a;Omer Lachish 最近&#xff0c;我们已经开始使用RQ库代替Celery库作为我们的任务运行引擎。第一阶段&#xff0c;我们只迁移了那些不直接进行查询工作的任务。这些任务包…

图灵机器人调用数据恢复_机器人也能撩妹?python程序员自制微信机器人,替他俘获女神芳心...

机器人也有感情还记得王传君饰演的《星语心愿之再爱》这部电影吗&#xff1f;王传君饰演的天才程序员“王鹏鹏”因工作原因不能陪伴照顾身在异地的女朋友“林亦男”&#xff0c;呆萌宅男“王鹏鹏”开发出一款以自己为原型的“王鹏鹏8.0”程序去陪伴异地恋的女友&#xff0c;后来…

Spark排错与优化

一. 运维 1. Master挂掉,standby重启也失效 Master默认使用512M内存&#xff0c;当集群中运行的任务特别多时&#xff0c;就会挂掉&#xff0c;原因是master会读取每个task的event log日志去生成spark ui&#xff0c;内存不足自然会OOM&#xff0c;可以在master的运行日志中看到…

在MySQL上使用带密码的GlassFish JDBC安全性

我在该博客上最成功的文章之一是有关在GlassFish上使用基于表单的身份验证来建立JDBC安全领域的文章 。 对这篇文章的一些评论使我意识到&#xff0c;要真正使它安全&#xff0c;应该做的还很多。 开箱即用的安全性 图片&#xff1a; TheKenChan &#xff08; CC BY-NC 2.0 &a…

利用python进行数据分析_利用python进行数据分析复现(1)

&#xfeff;一直以来&#xff0c;都想学习python数据分析相关的知识&#xff0c;总是拖拖拉拉&#xff0c;包括这次这个分享也是。《利用python进行数据分析 第2版》是一次无意之间在简书上看到的一个分享&#xff0c;我决定将很详细。一直都想着可以复现一下。但总有理由&…

C语言代码规范(七)#define

#define 宏定义的使用 #define MAX(x, y) ( ((x) > (y)) ? (x) : (y) ) #define MIN(x, y) ( ((x) < (y)) ? (x) : (y) ) 在宏定义中要把参数用括号扩起来( ((x) > (y)) ? (x) : (y) )。 因为宏只是简单的文本替换&#xff0c;如果不注意&#xff0c;很容…

http 二进制_浅谈HTTP协议

HTTP一、HTTP协议http协议&#xff0c;是超文本传输协议&#xff0c;此协议是基于TCP/IP的协议&#xff0c;是互联网上应用最为广泛的一直网络协议是一种无状态协议&#xff0c;默认端口为80,。设计HTTP的最初目的是为了提供一种发布和接受HTML页面的方法。通过HTTP或者HTTPS协…

linux redis客户端_为什么单线程Redis能那么快?

我们通常说&#xff0c;Redis 是单线程&#xff0c;主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的&#xff0c;这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能&#xff0c;比如持久化、异步删除、集群数据同步等&#xff0c;其实是由额外的线…

C语言开发笔记(七)const和指针

const修饰变量是常用的&#xff0c;不容易犯错&#xff0c;而const和指针一起使用时很容易混淆。 (一)const int *p #include <stdio.h>int main(void) {int a 10;int b 20;const int *p &a;*p b;return 0; } const在int *的左侧&#xff0c;即指针指向内容为…

ubuntu php 无法执行exec_利用webhook使php项目自动部署

php中文网最新课程每日17点准时技术干货分享1.先来讲一下自动部署的原理&#xff0c;一般在我们push代码的时候&#xff0c;可以自动请求webhook中设置的url&#xff0c;完成一次请求与响应。那么只要我们设置的url地址请求的php文件内容是执行命令行git push命令&#xff0c;则…

C语言开发笔记(八)static

在C语言中&#xff0c;static有3个作用&#xff1a; &#xff08;1&#xff09;在函数体&#xff0c;一个被声明为静态的变量在这一函数体内被调用的过程中维持其值不变。 #include <stdio.h>void test(void) {static int i 0;printf("%d\n", i); }int main…

ppt修复无法读取_移动硬盘故障分析以及建议修复方法

移动硬盘中存储了大量的重要数据&#xff0c;一旦出现什么问题&#xff0c;会让人急得焦头烂额。换个硬盘倒是件小事&#xff0c;但其中资料、数据的丢失更令人懊恼。而在硬盘使用的过程中&#xff0c;由于使用者一时的不注意&#xff0c;往往就很容易造成意外的问题。接下来&a…

(原创)c#学习笔记04--流程控制01--布尔逻辑03--运算符优先级

转载于:https://www.cnblogs.com/wodehao0808/p/4896018.html

m.2接口和nvme区别_NVMe/SATA SSD有啥不一样?萌新怎么选

随着NAND技术的升级迭代&#xff0c;堆栈层数不断提高使得SSD单位容量成本不断下降&#xff0c;消费级市场基本已经成为了SSD的天下。目前主流的SSD大致有两种接口&#xff0c;分别是M.2和SATA两种类型。NVMe/SATA有啥区别SATA接口的SSD执行的AHCI协议标准&#xff0c;是目前较…