Android 应用优化避免 OutOfMemoryError

发布于 2024-12-20 06:40:16 字数 306 浏览 2 评论 0原文

我有一个 Android 13mb 应用程序,它显示 SD 卡中的离线/缓存地图。我正在使用 mapnik 地图源,并且有 33, 000 个地图图块。

 m_mapView.setTileSource(TileSourceFactory.MAPNIK);

问题:

查看地图时,加载地图图块需要时间。此外,滚动时会冻结约2-3秒,然后强制关闭。我可以使用try catch吗?

在此处输入图像描述

I have an Android 13mb application, which displays offline/cached map from sd card. I am using mapnik mapsource, and has 33, 000 map tiles.

 m_mapView.setTileSource(TileSourceFactory.MAPNIK);

Problem:

When viewing the map, it takes time to load the maptiles. Furthermore, when scrolling it will freeze for about 2-3 seconds, then it will force closed. Can I use try catch?

enter image description here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

弥繁 2024-12-27 06:40:16

如果这些图像很大或很多,那么您可能没有足够的内存来一次将它们全部保存在内存中。您必须找到一种方法来智能地加载和卸载切片以适应可用的堆空间(32MB)。

但是,我有另一个猜测:您是否对不再需要的 Bitmap 对象调用了 recycle() ?如果不这样做,即使有足够的内存,您也会很快收到此错误。

If these images are large or many, then you may simply not have enough memory to keep them all in memory at once. You will have to find a way to intelligently load and unload the tiles to fit into available heap space, which is 32MB.

However, I have another guess: are you calling recycle() on the Bitmap objects that you do not need anymore? if you don't you can quickly get this error, even when there is enough memory.

梦归所梦 2024-12-27 06:40:16

我不知道图块到底是如何显示的,但无论如何,这里有一些要点:

  1. 确保仅在需要时才将内容保留在内存中。 Android 堆大小在 16-32MB 之间变化,当它经常用完时,您的应用程序将崩溃。
  2. 使用弱引用 - http://developer.android.com/reference/java/ lang/ref/WeakReference.html
  3. 当您每次从 SD 卡加载内容时,速度会很慢。确保您在单独的线程上执行此操作。
  4. 如果可能,请使用 NDK。本机代码没有 Android 上的 Java 环境所施加的严格要求。

I don't know how exactly the tiles are displayed but some points here anyway:

  1. Make sure you are keeping things in memory only if you need them. The Android heap size varies between 16-32MB and when it runs out which it often does, your app will crash.
  2. Use WeakReferences - http://developer.android.com/reference/java/lang/ref/WeakReference.html
  3. As you are loading things from the SD card every time things will be slow. Make sure you are doing this on a separate thread.
  4. If possible, use the NDK. Native code doesn't have the strict requirements which the Java environment on Android imposes.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文