【发布时间】:2010-12-03 00:16:42
【问题描述】:
我正在为我的公共交通应用程序制作地图。我用的是SurfaceView,它是一个基于tile的地图,除了主线程还有2个线程——绘图线程和位图加载线程。
位图是存储在 SD 卡上的 256x256 PNG,我正在缓存加载的位图,缓存容量为 64 位图。每个缩放级别都有不同的位图集,我的地图有 4 个缩放级别,每个下一个级别都放大 2 倍。
不幸的是,我的 Nexus One 上的滚动和捏缩放不流畅,FPS 为 15 - 20。当没有加载瓷砖时,FPS 为 35 - 40。如果我降低位图加载线程的优先级,它会变得完全平滑,但我经常在地图上看到尚未加载的(白色)图块 - 这比不平滑更糟糕。
那我该怎么办?到目前为止,我有 2 个想法:
- 尝试使用 OpenGL,但我不想花时间在它上面,然后发现我的 FPS 只增加了 3。我还想在用户单击地图标记后显示弹出窗口(与地图一起滚动),这我不知道如何在 GLSurfaceView 中进行操作。
- 仅当用户触摸屏幕或正在播放动画时,才将位图加载线程设置为低优先级。我试过了,但由于未知原因,它似乎使问题更加严重,触摸/不触摸屏幕没有任何效果。如果只是我可以修复的一些错误,那么还有另一个问题。如果我使用动能滚动来快速移动地图,我会看到很多未缓存的位图。
【问题讨论】: