Android 接入高德地图SDK模块的优化点点滴滴
起因:
由于在最近接手了一个关于导航的App,发现地图页面跳来跳去实在是卡顿地不行(运行在车载设备上的APP,机器性能实在是有限)。
初步判断:
应该是是关于地图等控件的反复创建和销毁,给内存GC带来了很大的压力。
简单调查:
通过 命令 adb shell dumpsys meminfo com.xxxx.xxx (后面那个是包名,当然你可以使用MAT等工具来看)
带有地图控件的页面之间跳来跳去,大量对象没有及时被回收,导致内存占用过高
解决方案:
利用Fragment来抽离各个有MapView的Activity中的业务逻辑,留下一个MapActivity就专门负责地图业务逻辑的效果展示;
这样多个带地图控件的Activity页面,就可以复用首页的地图控件即可,这样就可以复用地图控件这样的大对象了
上图,仅仅做了一个涉及到地图业务的优化(搜索页面),就少了10多M,效果还不错,目前在首页和搜索页面来回切换也都流畅许多了
探索高德地图:
有了上面的解决方案后,我就猜想高德地图可能也是这么干的,因为从首页到线路规划,再到导航,都是用了地图控件,那也是肯定是地图复用,才能减少大对象的创建和销毁
通过命令来:adb shell dumpsys activity | grep -i run 查看当前运行的activity,无论我在高德地图中怎么跳转,始终都是NewMapActivity,因此更加印证我的猜想
通过ui automator viewer 工具,看到了id为:fragment_container的全面覆盖页面的控件,id名称字面意思大家肯定都知道了,就是一个装fragment的容器
我也反编译了高德APK的代码,里面确实也是通过Fragment来实现多个页面的跳转和切换的
总结一下
在日常开发中,能复用的代码或者说是组件,能复用的就尽量复用,不要反复创建和销毁对象,那样真的很消耗系统资源;特别在后台开发中,高并发场景中更是如此,当然还要处理好多线程的问题,在移动端的开发中,多线程的问题还是比较好处理的。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
也谈Android签名机制
1. 前言 关于Android的签名机制,在一个月前就看过了,当时还写了下流程,感觉没有太大的技术含量就没有记录。最近在看APK安装过程,突然又想起安装过程包含了APK的验证,关于APK的验证无非就是签名的逆过程。但是发现自己对签名过程好像模糊了很多,遂决定记录下签名过程。 2. 关于签名 Android的签名现在分为两个版本:v1和v2,因为v1版本签名过程的缺陷,造成了APK可能被攻击。 v1签名:签名和摘要文件为APK解压后的META-INF文件夹下的*.MF、*.SF、*.RSA文件,其签名过程需要对文件进行解压并且计算每个文件的摘要。 v2签名:签名信息存储在ZIP文件格式中。7.0以上支持,7.0以下不支持,只能采用v1签名。 v2签名块位置 3. v1签名源码 我用到的源码都是在在线源码网站上下载的,这里用到了SignApk.java文件。 我们都知道如果使用命令行签名的话,都是执行的main方法: public static void main(String[] args) { // 对输入参数的解析和验证 ...... boolean signWholeFile = ...
- 下一篇
Android使用Room持久化SQLite
原文链接 前言 Android中提供了SQLite数据库进行数据的持久化 ,并提供了对应API访问数据库,而Room框架提供了SQLite数据访问抽象层,为高效的数据库访问层带来便捷 APP可以缓存用户数据,当APP离线时便从SQLite读取数据,当重新连线时即可完成和服务器数据的同步 谷歌官方强烈推荐使用Room框架操作SQLite数据库 room_architecture.png Hello World 首先在build.gradle中添加必要依赖 dependencies { def room_version = "1.1.1" implementation "android.arch.persistence.room:runtime:$room_version" annotationProcessor "android.arch.persistence.room:compiler:$room_version" // use kapt for Kotlin // optional - RxJava support for Room implementation "android....
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- Linux系统CentOS6、CentOS7手动修改IP地址
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Hadoop3单机部署,实现最简伪集群
- MySQL8.0.19开启GTID主从同步CentOS8