1

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

我的应用程序的基本层是一个简单的地图视图,上面覆盖着几个叠加层(2 个标记用于起点和目的地,一个用于路线)。

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

实现线程后,不再显示更新,也许你可以帮助我看一下下面我的代码摘录:

    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

4 回答 4

2

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

相反,拆分您的工作并通过 Handler 将结果发布回主线程

于 2010-06-15T13:12:51.320 回答
0

您只能在 UI 线程上更新 UI,所以我认为这是问题所在。查看这篇关于线程的文章以了解此问题的解决方案。

于 2010-06-15T13:10:32.080 回答
0

我可能在这里叫错了树,但我的猜测是,这与您在不是 UI 线程的线程上对 MapView 进行更改的事实有关。

我希望这会导致以下可能性之一:

  • 您的更改引发了您没有看到的异常(也可能是因为它在另一个线程上)
  • 您的更改被忽略,因为它们是在错误的线程上进行的。
  • 地图正在更新,但您的 UI 线程不知道它需要重绘地图。

希望这会有所帮助 - 至少可以模糊地为您指明正确的方向。

于 2010-06-15T13:11:44.613 回答
0

有人希望您没有使用 Google MapView 来呈现您的导航,因为根据我对条款和条件的阅读,导航不包含在可接受的使用政策中。

来自Android Maps API 服务条款

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

...

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

...

于 2011-01-14T23:02:16.033 回答