起因:

由于在最近接手了一个关于导航的App,发现地图页面跳来跳去实在是卡顿地不行(运行在车载设备上的APP,机器性能实在是有限)。

初步判断:

应该是是关于地图等控件的反复创建和销毁,给内存GC带来了很大的压力。

简单调查:

通过 命令 adb shell dumpsys meminfo com.xxxx.xxx (后面那个是包名,当然你可以使用MAT等工具来看)

带有地图控件的页面之间跳来跳去,大量对象没有及时被回收,导致内存占用过高

image.png

解决方案:

多个带地图控件的页面,复用首页的地图控件即可,这样就可以复用地图控件这样的大对象了

image.png

少了10多M,效果还不错,仅仅搜索页面中的地图复用了首页中的地图,在首页和搜索页面来回切换也都流畅许多了

探索高德地图:

有了上面的解决方案后,我就猜想高德地图可能也是这么干的,因为从首页到线路规划,再到导航,都是用了地图控件,那也是肯定是地图复用,才能减少大对象的创建和销毁

通过命令来:adb shell dumpsys activity | grep -i run 查看当前运行的activity,无论我在高德地图中怎么跳转,始终都是NewMapActivity,因此更加印证我的猜想

image.png

通过ui automator viewer 工具,看到了id为:fragment_container的全面覆盖页面的控件,id名称字面意思大家肯定都知道了,就是一个装fragment的容器

image.png

我也反编译了高德APK的代码,里面确实也是通过Fragment来实现多个页面的跳转和切换的

image.png

总结一下

在日常开发中,能复用的代码或者说是组件,能复用的就尽量复用,不要反复创建和销毁对象,那样真的很消耗系统资源;特别在后台开发中,高并发场景中更是如此,当然还要处理好多线程的问题,在移动端的开发中,多线程的问题还是比较好处理的。

补充下(2020.03.17)

建议在这种多个页面连续使用MapView的情景,使用一个主Activity(带MapView控件)+多个fragment来实现你的业务逻辑,fragment尽量复用主Activity的MapView。顺便说下,fragment开销很小,而且它也可以被复用,所以在有些场景下,建议多使用fragment,会感到页面切换如丝般顺滑

Android高德地图线优化,Android 接入高德地图SDK模块的优化点点滴滴相关推荐

  1. html插入地图的方法,JavaScript接入百度地图API的方法步骤

    一.百度地图API接入 1.搜索百度地图开发平台 2.注册百度账号 3.登陆并申请成为开发者 4.在百度地图开发平台的首页选择控制台,在控制台中创建应用 创建好应用以后就能在控制台我的应用中看到这个应 ...

  2. Google官网,Google android的产品线(important)

    > Google官网,google网站重回中国(2016.12) https://developers.google.cn/ ; https://firebase.google.cn/   ; ...

  3. Android开发知识(十)快速接入高德地图SDK(地图+定位+标记+路线规划+搜索)

    文章目录 申请接入流程 显示高德地图 显示定位 Marker 显示地图标记 Route 路线规划 Search 搜索 申请接入流程 1.首先到 [ 高德地图API官网] 申请注册帐号 2.进入控制台, ...

  4. Android接入高德地图SDK,Android高德SDK 地图篇一:集成高德SDK

    Android高德SDK 地图篇一:集成高德SDK 大家好,这是系列博文的第一篇: 系列博文会完成以下功能 一. 地图篇:利用高德SDK实现滴滴出行的效 二. 导航篇:利用高德SDK实现滴滴司机端的效 ...

  5. 【Android】接入高德地图SDK

    第一步 申请开发者权限 进入高德地图开放平台https://console.amap.com/dev/index申请认证个人开发者 第二步 创建应用 第三步 下载Android地图SDK 进入http ...

  6. Android MVVM框架搭建(八)高德地图定位、天气查询、BottomSheetDialog

    Android MVVM框架搭建(八)高德地图定位.天气查询.BottomSheetDialog 前言 正文 一.集成SDK 二.基础配置 ① 权限配置 ② 配置Key 三.显示地图 ① MapFra ...

  7. Android高德地图绘制区域,Android高德地图多边形的绘制与编辑

    最近项目中用到了一个高德地图画地块的功能,差了一下api,发现只有js有相关的方法,所以仿照js的交互方式做了一个android版的多边形绘制与编辑. 先不说,上一张效果图 完成效果图 1.通过观察, ...

  8. android打包jar包给unity使用接入高德sdk,实现定位。

    https://blog.csdn.net/unity_http/article/details/79929454 https://blog.csdn.net/why1happy/article/de ...

  9. Unity Android 接入高德定位SDK

    Unity版本 2020 第一步首先去高德开放平台注册账号然后申请Key 高德开放平台 | 高德地图API 注册好账号之后 点击控制台 然后选择管理key 新建一个应用 选择添加  然后创建一个key ...

最新文章

  1. 并查集 ---- 扩展域并查集判二分图 + 循环模拟字典树 The 2020 ICPC Asia Macau Regional Contest C. Club Assignment (详解)
  2. python领域有什么用-Python都能应用到哪些领域?具体就业职位有什么?
  3. C# 子类实例化基类 基类使用不了子类的方法_C#学习笔记11--接口/泛型
  4. C4.5-Release8中Ross Quinlan对缺失值的处理
  5. Notepad++远程连接Linux系统
  6. jvm(4)-虚拟机性能监控与故障处理工具
  7. 内核中dump_stack的实现原理(3) —— 内核函数printk的实现
  8. 数学竖式排版中不为人知的技巧
  9. Ioc--控制反转详解
  10. sap固定资产号码范围_SAP--FI详细解---固定资产
  11. 《锋利的jQuery》二、jQuery的选择器
  12. java deprecated 注释_@Deprecated注解的使用
  13. 介数中心度与紧密中心度_将开发团队与技术紧密结合的6种方法
  14. vue+Element表单验证+数字英文密码和手机号验证(详细)
  15. Tracup Talk:如何制作项目管理的甘特图?
  16. java word 题目导入_java使用poi导入word题库
  17. HX711测试【一个非常廉价且实用的模块】
  18. WPF中给文本框TextBox设置提示文字
  19. python可以爬取58同城代码_爬取58同城—字体反爬
  20. FFmpeg截图以及生成缩略图

热门文章

  1. php订单表设计,订单详情表,与,订单表 怎么做?
  2. 剖析公司技术栈,看看是否对大家适用!
  3. Google入股百度!
  4. 工作照制作微信小程序V2.4.21源码
  5. 苹果CMS小俊XG013主题模板下载
  6. 2020-12-25 PMP 群内练习题 - 光环
  7. 如何使用ARM协处理器CP15在32位ARRCH模式下操作64位寄存器)
  8. 计算机网络--串行传输与并行传输
  9. ACL 2022 | DialogVED:用于对话回复生成的预训练隐变量编码-解码模型
  10. AOZ8902CIL 瞬态电压二极管,设计用于电路保护。