我正在为我的公共交通应用程序制作地图。我正在使用SurfaceView,它是一个基于图块的地图,除主线程外还有2个线程 - 绘制线程和位图加载线程。
位图是存储在SD卡上的256x256 PNG,我正在缓存加载的位图,缓存容量是64位图。每个缩放级别都有不同的位图集,我的地图有4个缩放级别,每个下一个级别的缩放量都是2倍。
不幸的是,我的Nexus One上的滚动和缩放变焦并不平滑,FPS为15 - 20.当没有加载任何图块时,FPS为35 - 40.如果我降低了位图加载线程的优先级,它会变得完全平滑但我通常会在地图上看到尚未加载的(白色)瓷砖 - 这比非光滑度更差。
那我该怎么办?到目前为止我有两个想法:
答案 0 :(得分:2)
不要在渲染线程上执行任何 I / O. (你怎么能使用GLSurfaceView而不是顺便使用OpenGL?)
我已经编写了一个基于OpenGL图块的地图视图,它在Nexus One上很平滑(不是测量fps,但它的很容易像iPhone 4上的地图应用程序一样流畅)。诀窍是将所有I / O从渲染线程移开,降低工作线程的优先级,并在当前渲染结束时立即requestRender(),如果您知道需要另一个(例如在平移期间)缩放),即不要等待另一个线程发出信号。在市场中寻找Yell.com以查看其实际情况(尽管可能仅限于英国)。