背景
- Android7.0已经发布有些日子了,Android7.2.3马上也要出来了,我整理了一些Android7.0的特性,对测试过程中需要注意的点进行了分析。
Doze(打盹模式)加强版
对应改动点
- 打盹模式其实是从6.0就增加的特性,不过7.0是加强版。
- 当设备屏幕关闭一定时间后(无论充电与否,6.0只有在未充电时)设备会进入打盹模式第一部分限制:关闭应用网络访问和CPU、推迟作业和同步。
- 设备处于打盹模式并且静止一段时间后,系统会对WakeLock、AlarmManager、GPS和Wi-Fi扫描等。
- 在打盹模式下,系统会有一个时间窗口,在设定的场景下,集中执行我们想要执行的作业/同步。Google从6.0时就建议用Schedule的方式来执行任务。
- 在Doze模式中还有一种Standy的模式(从android6.0就有),这个模式也称之为应用待机模式,即:用户长时间未与应用发生交互时,Android系统会使应用进入空闲状态。
测试点
- app的保活进程在静置一段时间后,是否还能存活。
- app在静置时能否及时的同步消息,比如安通+能否及时收到消息。
- app心跳包的时间间隔是否随着时间的增加而增加。
- 对于性能测试,需要关注电量消耗。
优化建议
- 使用JobSchedule来执行心跳包的逻辑或者定时同步消息的任务。
备注
运行adb命令使系统进入Doze模式:
adb shell dumpsys battery unplug
adb shell dumpsys deviceidle step测试stanby模式
adb shell dumpsys battery unplug
adb shell am set inactive packageName true
(true时代表进入模式, false时恢复)
隐式广播优化
改动点
- 应用不再接收静态注册的CONNECTIVITY_ACTION广播,但是应用在前台
时可以接收动态注册的CONNECTIVITY_CHANGE广播。 - 应用不能发送或者接收ACTION_NEW_PICTURE和ACTION_NEW_VEDIO广播
- 主要为了减少设备的唤醒,节省内存和电量
测试点
- app中涉及到网络切换场景的,需要注意适配,比如:某些保活进程会监听网络切换来发送心跳、监听网络状态变化去下载大文件、监听网络状态去同步数据,可重点测试app置于后台的场景。
- app中有涉及到拍照片及录视频的场景,逻辑是否正常(照片能否正常加载、视频录制完的逻辑)。
优化建议
这里的参考方案都是针对网络状态变化广播的
- 使用JObSchedule。
- 动态注册广播,监听CONNECTIVITY_CHANGE的广播,前提是应用在前台运行时。
- 使用ConnectivityManager,通过回调来监听网络变化。
权限变更(系统权限更改)
改动点
- 优化了Android6.0中动态获取权限的方式,封装性更好。
- app不能使用私有文件(/data/data/package/目录)的文件权限,也就是不能直接通过File的API来访问文件。
- DownloadManager不再按文件名(通过 COLUMN_LOCAL_FILENAME)获取私人存储路径。
测试点
- 涉及到权限申请的逻辑是否正常(读取联系人、写文件等)
- 目前,这种限制还没有完全生效,仍然可以通过File来访问自有文件
- app中有访问本地文件的操作,比如浏览文件、读取某个文件的操作是否正常。
- 下载一般文件的逻辑,通常都是自己写的,不会用到DownloadManager,可以结合代码全局搜索下是否使用了DownloadManager。
- 若没有代码,可直接验证app中下载大文件的逻辑是否正常。
应用间共享文件
测试点
- Android系统强制执行了StrictMode API政策,禁止向你的应用外公开
File://Uri。 - 如果其他应用通过Intent包含File://Uri来访问你的文件,则会抛FileUriExposedException的异常。
- 比如 系统相机拍照、裁剪照片。
测试点
- 验证app中,有加载本地图片、拍照(意见反馈及添加图片)的用例,看是否正常。
优化建议
- 通过FileProvider解决。FileProvider的使用方法可以自行查询。
- 裁剪图片推荐TakePhoto开源库
无障碍改进
改动点
- 屏幕缩放:支持用户设置显示尺寸,放大或者缩小屏幕上的元素,从而提升设备对视力不佳用户的可访问性。
- 当屏幕密度发生变化时,所有进程(包括前台和后台)都会收到有关配置变更的通知。
测试点
- 在屏幕宽度为320dp的设备上测试app,确保其逻辑正常,无按钮不能点甚至crash出现。
- 屏幕缩小和放大,app的界面和逻辑是否正常,内容是否能展示完全。
优化建议
- 避免用像素单位制定尺寸,因为像素不会随屏幕密度缩放,应该使用dp与像素无关的单位。
NDK应用链接至平台库
改动点
- NDK,只能使用Android平台提供的公开API
- 如果使用了非公开API,在Android7.0的设备上运行的APP在日志消息输出中生成一个错误,并且会在手机上作为消息显示。
测试点
- 主要是App的稳定性,APP启动过程和功能模块加载过程(可能会用到NDK库的场景)中是否会有crash
多屏模式
改动点
- 可以拖拽app在屏幕上同时运行两个应用,比如可以同时浏览网页和写邮件
- 这种情况下,会忽略屏幕旋转的配置。
测试点
- 主要是界面的适配,比如界面元素能否显示完全,滚动条是否可以正常使用等。
- app的交互逻辑是否正常,比如:页面跳转、点击事件等。
逐步引入JDK8.0
改动点
- 主要改动是会引入一些新的语法及去掉一些不再使用的方法
- 其他java8的特性,比如:Lambdas
测试点
- app的整体的兼容性,是否有crash。比如:ArrayList实现中的私有属性array被移除,假如用到它,就可能会crash。
- 牵扯到一些api的变更,需要整体适配。
通知增强功能
改动点
- 自定义消息样式(可以设计和自己app符合的样式)
- 捆绑通知(消息设置成组)
- 直接回复
- 自定义视图
测试点
- 验证app通知展示及逻辑是否正常。
- 验证app通知直接回复是否可以正常使用。
JIT/AOT编译
测试点
- 安装APK时不再编译成本地机器码,而只是解释字节码(类似Dalvik)
- ART有一种更快的解释器,通过一种新的JIT完成。代码在执行期间被分析,分析结果保存起来,当设备空闲或者充电时,ART会对 执行频繁的代码进行编译成机器码。
Data Saver
改动点
- 主要是为了限制后台应用的流量消耗(针对蜂窝网络:4G、3G、2G)
- 开启Data Saver之后,后台应用无法访问网络,可以通过intent启动Data Saver设置页面
测试点
- 验证app在Data Saver开启之后的逻辑是否正常:比如是否能拉起设置页面。
- 验证开启Data Saver之后,心跳包逻辑是否正常(是否会不停做无意义的重连操作等)。
其他重要说明
改动点
- 因为屏幕可以缩放,在Android7.0及以上版本,当屏幕密度发生变化时不会终止所有的应用。
- 在Android7.0以下的版本,当屏幕密度发生变化时,会终止应用的进程。
- Android7.0上的应用能够妥善处理配置变更。
- 新增了StrictMode在主线程写TCP套接字数据的判断,会抛出android.os.NetworkOnMainThreadException。
- Debug.startMethodTracing()方法抓取的trace文件不再存储到sdcard,而是放到上面提到的共享存储空间特定目录中。
- 检查Binder事务间发送的大负载,比如在Activity.onSaveInstance()上传过多的数据。这会引发RuntimeException