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)基於來自傳感器的位置輸入的實時導航或路線引導(包括但不限於任何視覺或聽覺轉由轉彎路線)的任何產品,系統或應用程序使用服務或內容指導);

...

相關問題