Android的MapView Navigation-App上的性能问题

时间:2010-06-15 13:06:34

标签: android performance multithreading navigation android-mapview

我有一个关于使导航应用程序更快更稳定的问题。

我的应用程序的基本层是一个简单的mapview,覆盖了几个叠加层(2个标记用于开始和目标,1个用于路径)。

我的想法是实现一个线程来显示路线,这样在计算更复杂的路线时,应用程序就不会挂断(就像现在一样)。

在实现该主题之后,没有任何更新显示,也许您可​​以帮我简短地看一下下面的代码摘录:

    private class MyLocationListener implements LocationListener {
    @Override
    public void onLocationChanged(Location loc) {
        posUser = new GeoPoint((int) (loc.getLatitude() * 1E6), (int) (loc
                .getLongitude() * 1E6));

        new Thread(){
        public void run(){
            mapView.invalidate();

            // Erase old overlays
            mapView.getOverlays().clear();

            // Draw updated overlay elements and adjust basic map settings
            updateText();
            if(firstRefresh){
                adjustMap();
                firstRefresh = false;
            }
            getAndPaintRoute();
            drawMarkers();
        }
        };
    }

某些功能已经汇总到像“drawMarkers()”或“updateText()”这样的方法......(它们不需要再注意; - )

4 个答案:

答案 0 :(得分:2)

你什么时候要求线程运行?我只看到创建的代码。如果你这样做,你会发现只允许主(UI)线程更新,正如RPond所说。

相反,分开你的工作和post the results back to the main thread via a Handler

答案 1 :(得分:0)

您只能更新UI线程上的UI,因此我认为这是问题所在。有关此问题的解决方案,请查看有关线程的article

答案 2 :(得分:0)

我可能在这里咆哮错误的树,但我的猜测是,这与你在不是UI线程的线程上对MapView进行更改这一事实有关。

我希望这会导致其中一种可能性:

  • 你的更改正在抛出一个你没有看到的异常(再次可能是因为它在另一个线程上)
  • 您的更改被忽略,因为它们是在错误的主题上制作的。
  • 地图正在更新,但您的UI线程不知道需要重绘地图。

希望这会有所帮助 - 至少可以指出你是一个正确的方向。

答案 3 :(得分:0)

有人希望您不使用Google MapView来渲染导航,因为在阅读条款和条件时,导航不包含在可接受的使用政策中。

来自Android Maps APIs Terms of Service

  

根据第8节,您不得(也不允许任何其他人):

     

...

     

8.7。将服务或内容与任何产品,系统或应用程序一起使用或与之相关(a)基于来自传感器的位置输入的实时导航或路线引导(包括但不限于任何视觉或听觉转弯路线)指导);

     

...