Android App Optimization避免OutOfMemoryError

时间:2011-12-08 16:53:27

标签: java android bitmap android-mapview tiles

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

 m_mapView.setTileSource(TileSourceFactory.MAPNIK);

问题:

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

enter image description here

2 个答案:

答案 0 :(得分:0)

我不知道瓷砖的确切显示方式,但无论如何都要显示:

  1. 确保只在需要时将内容保存在内存中。 Android堆大小介于16-32MB之间,当它经常运行时,你的应用程序会崩溃。
  2. 使用WeakReferences - http://developer.android.com/reference/java/lang/ref/WeakReference.html
  3. 每当事情变得缓慢时,你正在从SD卡上装载东西。确保你在一个单独的线程上这样做。
  4. 如果可能,请使用NDK。本机代码没有Android上的Java环境强加的严格要求。

答案 1 :(得分:0)

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

但是,我还有另一个猜测:您是否在recycle()对象上调用了Bitmap,而这些对象不再需要了?如果不这样做,即使有足够的内存,也可以快速得到此错误。