2011-06-10 51 views
0

我在我的應用程序中遇到了問題,我從未遇到過。我一直在使用此應用程序一段時間並運行它成千上萬的時間,但我從來沒有得到這個錯誤。java.lang.OutOfMemoryError:位圖大小超過VM預算,即使我沒有使用任何圖像

我有一臺服務器接收一些GPS數據,這些數據也寫在一個數據庫和一個單例類中。 在我的一個課程中,我使用異步任務線程,以便從singleton類讀取到達的新GPS數據,並在地圖上顯示這些點。

現在突然我得到的錯誤,在這樣一行:

mc.animateTo(p1); 

where mc=mapView.getController(); 

這是我的代碼看起來像:

public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

      mapView = (MapView) findViewById(R.id.mapview1); 

    mapView.setBuiltInZoomControls(true); 

    mc = mapView.getController(); 

    mc.setZoom(17); 

    mapView.setSatellite(true); 

    mapView.setStreetView(true); 

    mapView.invalidate(); 
} 


public class InitTask extends AsyncTask<Void, GeoPoint, Void> { 

    GeoPoint p; 

    protected Void doInBackground(Void... voids) { 

     try { 

      while (true) { 


       if(number.equals("Car1")) 
       { 
       longitude = ServerManager.getInstance().getLastLongitude1(); 
       latitude = ServerManager.getInstance().getLastLatitude1(); 
       speed = ServerManager.getInstance().getLastSpeed1(); 
       loc1 = ServerManager.getInstance().getLastLocation1(); 
       speed = ServerManager.getInstance().getLastSpeed1(); 
       } 



       runOnUiThread(new Runnable() { 
        public void run() { 
         speed_1.setText(Integer.toString(speed)); 
         location.setText(loc1); 

        } 
       }); 


       p = new GeoPoint(latitude, longitude); 

       publishProgress(p); 

       Thread.sleep(1500); 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    protected void onProgressUpdate(GeoPoint... progress1) { 

     theRouteDraw(progress1[0]); 
    } 

這是theRouteDraw()的樣子:

public void theRouteDraw(GeoPoint p1) { 

    mc.animateTo(p1); 

    mc.setZoom(17); 

    mapView.setSatellite(true); 

    mapView.invalidate(); 
} 

ServerManager是我的單例類......我從那裏讀取新數據並使用publishProgress();和方法theRouteDraw()在地圖上顯示這些點。

我沒有在地圖上使用任何覆蓋圖或特殊圖像。

我在此行得到錯誤在該方法中

public void theRouteDraw(GeoPoint p1) { 

    public void theRouteDraw(GeoPoint p1) { 

    mc.animateTo(p1); 

    mc.setZoom(17); 

    mapView.setSatellite(true); 

    mapView.invalidate(); 
} 

:mc.animateTo(P1);

這是我的logcat:

java.lang.OutOfMemoryError: bitmap size exceeds VM budget 
at android.graphics.Bitmap.nativeCreate(Native Method) 
at android.graphics.Bitmap.createBitmap(Bitmap.java:468) 
at com.google.android.maps.StreetViewRenderer.generateNewTileImage(StreetViewRenderer.java 
at com.google.android.maps.StreetViewRenderer.renderTile(StreetViewRenderer.java:88) 
at com.google.android.maps.AndroidTileOverlayRenderer.renderTile(AndroidTileOverlayRenderer.) 
at com.google.googlenav.map.Map.drawTile(Unknown Source) 
at com.google.googlenav.map.Map.drawMapBackground(Unknown Source) 
at com.google.googlenav.map.Map.preLoad(Unknown Source) 
at com.google.android.maps.MapController.animateTo(MapController.java:234) 
at com.google.android.maps.MapController.animateTo(MapController.java:203) 
at com.Server_1.Server4.theRouteDraw(Server4.java:159) 

回答

0

谷歌地圖圖像塊是位圖和Google Maps也緩存一些圖像爲好,所以被分配的位圖。我面臨類似的問題。

在這種情況下刪除:

mc.animateTo(p1); 

可能會解決這個問題,這似乎是引發錯誤,它是有道理的,這可能涉及相當多的圖片加載。您可能會在某處發生內存泄漏,可能是您的mapview引用,這是問題的根源。

相關問題