解决步骤:
1、去掉maputil,不需要展示
2、去除百度地图的定位,改用导航自带定位回调
3、优化权限申请
分析工具:Android Studio自带profiler工具
主要参数:(出处)
-
Native:从 C 或 C++ 代码分配的对象内存。
即使您的应用中不使用 C++,您也可能会看到此处使用的一些原生内存,因为 Android 框架使用原生内存代表您处理各种任务,如处理图像资源和其他图形时,即您编写的代码采用 Java 或 Kotlin 语言。 -
Graphics:图形缓冲区队列向屏幕显示像素(包括 GL 表面、GL 纹理等等)所使用的内存。 (请注意,这是与 CPU 共享的内存,不是 GPU 专用内存。)
分析过程:
这里我们主要观察cpu变化和内存变化,内存变化指标主要观察graphics(图形绘制内存指标,以下简称gp)和native数据变化
注意:我们这里只看变化值
step1:去掉mapView:
去掉maputil和mapView之前,进入activity,gp暴涨了27.4m,native也涨了19.6m,分析了下cpu加载方法耗时发现代码内结合maputil加载了一个mapView,且每秒n次在不断刷新,导致onCreat方法加载耗时接近1000ms
进入前
进入后
优化后,gp上涨了13.4m,native涨了11.9m:
进入前 进入后
step2:去除百度地图的定位,改用导航自带定位回调:
代码里有涉及到定时获取定位去获取接口数据,我们直接把接口放到导航自带的定位回调即可,此处忽略性能优化前后对比,少一个定时定位模块效果显而易见。
step3:优化权限申请:
我们发现两个弹窗从显示到消失过程native几乎没有变化,gp却从62.6m暴降到28.7m再到16.7m,整整降了45.9m,在此过程中,不仅有弹窗显示,也有权限申请等过程,代码包含for循环等逻辑。
第一个弹窗显示 第一个弹窗消失,第二个弹窗显示 第二个弹窗消失我们自己尝试写了一个同样的dialog展示,发现gp在dialog消失后下降了10m左右,这个比较符合第二个弹窗消失的消耗,那么第一个弹窗消失的过程除去10m消耗,还剩余24m左右未知消耗。
我们考虑到在Android9.0以后对app耗电限制的问题,在这里我们先申请权限,每次进入之前先检查白名单,确认已经拿到权限后再进入轨迹导航。
todo:不过目前在华为荣耀的Android9.0机型有点问题,该机型的9.0版本并没有白名单。
网友评论