微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

GMSMapView 缓存的瓦片在缩放后保留在内存中,导致内存使用率高和 App 性能不佳

如何解决GMSMapView 缓存的瓦片在缩放后保留在内存中,导致内存使用率高和 App 性能不佳

在我的应用程序中,我展示了一个显示 GMSMapView 的 ViewController。在应用程序处于前台之前,ViewController 和 GMSMapView 都不应该被解除,因此 GMSMapView 对象永远不会被释放,而且由于我还显示了 GMSPanoramaView,两者都是非常昂贵的对象,因此我有一个表现与高内存使用率相关的问题。

应用启动后,当 GMSMapView 初始化时,内存使用量相对较低,完全符合我的应用要求。

问题是在我放大后出现的,我遇到了很高的内存增加,即使在我缩小之后也永远不会释放。我不确定,但在我看来,SDK 正在缓存某些内容并且从未被释放。 在下面的图像中(测试设备:iPhone XR),您可以清楚地看到问题,在我缩放时出现第一个峰值,从那时起,即使缩放级别回到 0,内存使用量也不会减少:

enter image description here

我正在尝试减少与缓存(?)相关的内存使用量,但我不知道如何实际做到这一点,甚至不知道是否有可能。 根据我对文档的理解,.clear() 方法仅影响标记和叠加层。我还注意到可能有用的 stopRendering() 方法,但它已被弃用。

顺便说一句,为了进行一些与 GMSMapView 相关的一般性能改进,我已经将 MapView 属性 .preferredFrameRate 设置为等于 .conservative 以降低渲染帧速率,并且还设置了 {{ 1}} 和 .isBuildingsEnabled = false 以避免无用的缓存。

我的问题是:使用 GoogleMaps SDK,是否可以在地图缩小后阻止上述缓存或释放内存?如果没有,我还能做些什么来减少与 GMSMapView 相关的高内存使用率?

编辑:这可能对其他人有用,因此我添加了更多 GoogleMaps SDK 优化技巧。我正在使用自定义地图样式,并且根据我的个人经验,我发现使用 Cloud-based Map Styling(目前处于测试阶段)在渲染地图图块方面比经典的 .isIndoorEnabled = false 方法要快一些。

解决方法

经过一番研究,我发现存在一个关于高内存使用率的未决问题:https://issuetracker.google.com/issues/35826246。 这是 6 年前开放的,不确定它是否会被解决,谷歌可耻。 除了指出问题并希望得到解决之外,别无他法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?