Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android应用程序优化避免OutOfMemoryError_Java_Android_Bitmap_Android Mapview_Tiles - Fatal编程技术网

Java Android应用程序优化避免OutOfMemoryError

Java Android应用程序优化避免OutOfMemoryError,java,android,bitmap,android-mapview,tiles,Java,Android,Bitmap,Android Mapview,Tiles,我有一个安卓13mb应用程序,它显示sd卡的离线/缓存地图。我使用的是mapnik mapsource,有33000个地图分幅 m_mapView.setTileSource(TileSourceFactory.MAPNIK); 问题: 查看地图时,加载地图分幅需要时间。此外,当滚动时,它将冻结约2-3秒,然后将强制关闭。我可以用try-catch吗 我不知道瓷砖到底是如何显示的,但这里有一些要点: 确保你只在需要的时候才把东西保存在内存中。Android堆大小在16-32MB之间变化,当它

我有一个安卓13mb应用程序,它显示sd卡的离线/缓存地图。我使用的是mapnik mapsource,有33000个地图分幅

 m_mapView.setTileSource(TileSourceFactory.MAPNIK);
问题:

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


我不知道瓷砖到底是如何显示的,但这里有一些要点:

确保你只在需要的时候才把东西保存在内存中。Android堆大小在16-32MB之间变化,当它耗尽时(通常如此),你的应用程序将崩溃。 使用weakreference- 因为每次从SD卡加载东西时,速度都会很慢。确保在单独的线程上执行此操作。 如果可能,使用NDK。本机代码没有Android上Java环境强加的严格要求。
如果这些图像很大或很多,那么您可能没有足够的内存将它们同时保存在内存中。您必须找到一种方法来智能地加载和卸载磁贴,以适应可用的堆空间(32MB)


然而,我有另一个猜测:您是否正在调用不再需要的位图对象的循环?如果您不这样做,您可以很快得到此错误,即使内存足够。

请使用logcat中的文本而不是图像。先生,我无法复制lagcat的详细信息,因此我打印屏幕。实际上,您可以。。。选择要复制的行,然后执行Control+C,或转到Edit->copy首先感谢您的回答,我不知道如何以这样的方式编码,以便将内容保留在内存中。第二,你能举一个例子说明什么时候做线程。第三,我是java新手,我不知道如何使用文件I/O,除了文件I/O,你能给我其他的东西吗。。。谢谢你,先生,还有更多的力量