1

我有一个问题,使导航应用程序更快,更稳定。Android的MapView导航应用程序的性能问题 - 应用程序

我的应用程序的基本层是一个简单的MapView,覆盖有多层重叠(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()“...(他们不需要更多的关注;-))

回答

2

当你实际上需要的线程运行?我只看到代码为创建它。如果你这样做,你会发现只有主(UI)线程才能被更新,就像RPond笔记一样。

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

+0

嗨,你是对的,我没有启动线程*耻辱*。现在我的路线显示出来了,我将对性能进行一些测试;-) – poeschlorn 2010-06-15 13:38:00

+0

注意:当您在主UI线程之外进行更新时,我认为您已陷入不受支持/未定义的行为。处理程序模式是你的朋友。 – 2010-06-15 13:51:35

+0

以及如何使用同步方法更新地图? – poeschlorn 2010-06-22 09:21:35

0

您只能更新UI线程上的UI,所以我认为这是问题所在。看看这个线程article解决这个问题。

0

我可以在这里找错了树,但我的猜测是,它是事做,你在一个线程不是UI线程进行更改的MapView的事实。

我预计这将导致这些可能性之一:

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

希望这会有所帮助 - 至少通过指引您隐藏正确的方向。

0

一会你不使用谷歌的MapView从我的条款和条件的阅读呈现您的导航,因为希望,导航不包括在可接受的使用政策。

Android Maps APIs Terms of Service

在本节下8,您不得(也不得允许任何其他人):

...

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

...

相关问题