2011-11-06 26 views
-3

我想在android中構建Google地圖集成。我的應用程序只是在地圖上顯示當前位置。我能夠從GPS獲得正確的緯度和經度值,並且它已被指向使用疊加層類別的最近位置。我正在嘗試將GPS緯度和經度值轉換爲其地名,並且這是在單獨的處理程序線程中完成的。當我的應用程序在某些時候android設備正在屏幕鎖定模式下運行時。解鎖屏幕後,有時我看到我的當前mapActivity在一段時間內沒有迴應,系統生成Android ANR消息以「強制關閉」此活動。這是否僅僅是因爲我的處理程序發生?線程沒有響應回主系統UI線程?或者有關於此的其他問題? 我對處理器線程代碼片段如下...如何在地圖集成應用程序中使用處理程序線程時避免Android ANR?

 private void ConvertPointToLocation(GeoPoint point) { 
     final GeoPoint p= point; 
     Thread thrd = new Thread() 
     { 
     public void run(){ 

        Geocoder geoCoder = new Geocoder(  
         getBaseContext(), Locale.getDefault()); 
        try { 
         List<Address> addresses = geoCoder.getFromLocation(
         p.getLatitudeE6()/1E6, 
         p.getLongitudeE6()/1E6, 1); 

         if (addresses.size() > 0) { 
          for (int indexValues = 0;  
           index < addresses.get(0).getMaxAddressLineIndex(); indexValues++) 
           address += addresses.get(0).getAddressLine(indexValues) + " "; 
         } 
         uiCallback.sendEmptyMessage(0); 

        } 
        catch (IOException e) {   
         e.printStackTrace(); 
        } 
     } 
    }; 
    thrd.start(); 
    } 

    private Handler uiCallback=new Handler(){ 
     @Override 
     public void handleMessage(Message msg) 
     { 
     //TextView locationNameDisplay value is set by address String variable... 
      locationNameDisplay.setText(address); 
      address=""; 
     } 
    }; 

我需要知道爲什麼Android的不是當我的活動在後臺要響應對話框來了。

歡迎您提供幫助和建議,因爲我是這個領域的新手,我正在學習一些新的東西?

回答

-1

您可能需要爲這樣的任務創建Service,因爲使用ServicesThreads之間存在差異。當你有一個相對較長的運行操作,如下載一些東西時,你應該使用單獨的Thread。此時,啓動此線程的活動必須處於前臺。當您需要執行一些非常長的運行操作時,您應該使用Service來讓用戶關閉應用程序並執行其他操作,而服務仍在後臺運行。希望這可以幫助。

+0

感謝您的支持。我正在將我的代碼從線程更改爲從後臺獲取持續位置更新的服務。 – GaurangDhorda

+0

@GaurangDhorda,不客氣!如果您發現它有幫助,請考慮接受答案。 – Egor

相關問題