鹅厂专家详解Android N适配要点 | 腾讯优测干货分享

1.Doze模式更加强大

该模式是在Android6.0中引入的,当用户设备未插电源、处于静止状态屏幕关闭时,该模式会推迟CPU和网络活动,从而增加电池寿命。

Android_N中对这种模式进行了加强,当设备处于充电状态且屏幕已关闭一定时间后,设备会进入打盹模式并应用第一部分限制:关闭应用网络访问、推迟作业和同步。如果进入打盹模式后设备处于静止状态达到一定时间,系统则会对 PowerManager.WakeLockAlarmManager 闹铃、GPS Wi-Fi 扫描应用余下的打盹限制。无论是应用部分还是全部打盹限制,系统都会唤醒设备以提供简短的维护时间窗口,在此窗口期间,应用程序可以访问网络并执行任何被推迟的作业/同步。

 

这种情况倒也好办,要么就是让用户将自己的的应用加入白名单,

或则在代码中使用Intent的方式跳转到设置页面,让用户去设置;

Google推荐我们使用Schedule的方式来管理我们的任务,我们可以设置让这些任务在特定的时候才去执行,比如将任务设置运行在充电或则无限制的时候运行,如下就是加入一个网络无限制的任务:

wKioL1d7JRzwsPs5AACtv4DqQXU557.jpg

GoogleAPI 23中为我们加入了一个新的Action,我们可以通过调用这个Action跳转到指定页面指导用户设置白名单:

wKiom1d7JUrAjYu6AAC8WTmqNCU895.jpg

wKioL1d7JUqgX4XwAAA-79cLyAA566.jpg

Doze模式中还有一种Standby的模式,这个模式相对更严格,如果对于及时通信的软件在未加入白名单的情况下,处于该模式不能收到及时的提示,必须从该模式恢复才能收到,因此需要特别注意,我们可以从google的官方文档当中查到进入该模式的ADB指令:

wKiom1d7JXPQubtcAACb-kIibsc434.jpg

将第二条指令中的true改为false即可恢复,这个便于开发和测试。

2.禁止一些广播的行为

在之前的Android系统中,我们开启一个监听事件的广播后,程序在事件触发的时候就会触发我们的广播,而且不值一个程序会收到通知,所以在Android_N中对CONNECTIVITY_ACTIONACTION_NEW_PICTUREACTION_NEW_VIDEO三个广播进行了处理。

a) 面向 Android N 开发的应用不会收到 CONNECTIVITY_ACTION 广播,即使它们已有清单条目来请求接受这些事件的通知。在前台运行的应用如果使用 BroadcastReceiver 请求接收通知,则仍可以在主线程中侦听 CONNECTIVITY_CHANGE

b) 应用无法发送或接收 ACTION_NEW_PICTURE ACTION_NEW_VIDEO 广播。此项优化会影响所有应用,而不仅仅是面向 Android N 的应用。

未来的 Android 版本还可能会弃用其他隐式广播以及未绑定的后台服务。有鉴于此,您应避免依赖在清单文件中声明的接收器来侦听隐式广播或删除此依赖关系,以及避免或删除对后台服务的依赖关系。

3.权限机制的更改

Android N 做了一些权限更改,包括用户帐户权限和向外部存储设备写入信息的新权限,这些更改可能会影响您的应用。下面概要列出了预览版中已发生更改的权限。
GET_ACCOUNTS(已弃用)
GET_ACCOUNTS 权限现已弃用。对于面向 Android N 的应用,系统将忽略此权限。

下面我们就来着重的谈一谈关于这个权限修改,从Android6.0开始Google引入了权限动态申请的机制,在之前的版本中,我们申请权限都是一次性在应用的Manifest文件中将我们程序所需要的权限,在用户安装App的时候一起向用户申请,这样会造成要么用户没有仔细看就直接同意安装了,为后期带来安全隐患,要么用户不同意应用程序无法安装,但是对于一个app来说,可能有的权限不是我们必须的,因此GoogleAndroid6.0中就引入了动态申请权限的机制。

该机制面向于6.0以上的版本,并且在6.0中将targetVersion指定为23,否者效果和之前的版本一样。

我们就拿<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />这个向外部存储卡进行写操作的权限来举例。

当我们需要向外部存储卡进行写操作的时候,我们需要遵循如下的步骤:

a).查询是否具有该权限:

wKioL1d7JYSzLk3hAAA-wxQvO5Y973.jpg

这里面需要注意的是,为了向下兼容,ContextCompatActivityCompat的导入的是support.v4包下的

wKiom1d7JZ2Q77VSAABLvRX57ig032.jpg

hasPerMission就是查询的返回值,如果返回true就表示我们已经具有了权限,可以直接进行操作,如果是false的话,我们就需要向用户动态的申请写的权限了,如下:

wKiom1d7JbCzKzKSAACyE-fzgSk681.jpg

全文链接:(体验更佳~)

http://bbs.utest.qq.com/?p=760&uid=1a87084a012d4fe59dd416e3ce2228be


腾讯优测(http://utest.qq.com)是专业的移动云测试平台,提供【兼容性自动化测试】【云手机】【漏洞检测】等多维度测试服务。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章