0

Эта ошибка не происходит, когда карта нагрузки, но после перемещения положения карты в другие места и новые маркеры появляются ...Из ошибки памяти - при добавлении маркеров в GoogleMap и делает Bitmap

Вот StackTrace:

08-29 15:11:38.061: E/art(6669): Throwing OutOfMemoryError "Failed to allocate a 4194316 byte allocation with 3486016 free bytes" 
08-29 15:11:38.201: E/AndroidRuntime(6669): FATAL EXCEPTION: GLThread 2298 
08-29 15:11:38.201: E/AndroidRuntime(6669): Process: com.---.---, PID: 6669 
08-29 15:11:38.201: E/AndroidRuntime(6669): java.lang.OutOfMemoryError: Failed to allocate a 4194316 byte allocation with 3486016 free bytes 
08-29 15:11:38.201: E/AndroidRuntime(6669):  at android.graphics.Bitmap.nativeCreate(Native Method) 
08-29 15:11:38.201: E/AndroidRuntime(6669):  at android.graphics.Bitmap.createBitmap(Bitmap.java:810) 
08-29 15:11:38.201: E/AndroidRuntime(6669):  at android.graphics.Bitmap.createBitmap(Bitmap.java:787) 
08-29 15:11:38.201: E/AndroidRuntime(6669):  at android.graphics.Bitmap.createBitmap(Bitmap.java:754) 
08-29 15:11:38.201: E/AndroidRuntime(6669):  at opl.a(Unknown Source) 
08-29 15:11:38.201: E/AndroidRuntime(6669):  at opp.a(Unknown Source) 
08-29 15:11:38.201: E/AndroidRuntime(6669):  at opp.a(Unknown Source) 
08-29 15:11:38.201: E/AndroidRuntime(6669):  at opp.b(Unknown Source) 
08-29 15:11:38.201: E/AndroidRuntime(6669):  at oow.a(Unknown Source) 
08-29 15:11:38.201: E/AndroidRuntime(6669):  at ope.a(Unknown Source) 
08-29 15:11:38.201: E/AndroidRuntime(6669):  at okm.a(Unknown Source) 
08-29 15:11:38.201: E/AndroidRuntime(6669):  at ojx.a(Unknown Source) 
08-29 15:11:38.201: E/AndroidRuntime(6669):  at ojx.b(Unknown Source) 
08-29 15:11:38.201: E/AndroidRuntime(6669):  at otq.k(Unknown Source) 
08-29 15:11:38.201: E/AndroidRuntime(6669):  at otq.run(Unknown Source) 

Вот как я создаю Bitmap:

public Bitmap loadBitmapFromView(View v) { 

     try { 
      if (v.getMeasuredHeight() <= 0) { 
       v.measure(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT); 
        Bitmap bActual = Bitmap.createBitmap(v.getMeasuredWidth(), v.getMeasuredHeight(), Bitmap.Config.ARGB_8888); 
      Bitmap b = Bitmap.createScaledBitmap(bActual, 120, 120, true); 
       Canvas c = new Canvas(b); 
       v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight()); 
       v.draw(c); 
       return b; 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return null; 
     } 
     return null; 
    } 

это называется в моем doInBackground в моем AsyncTask, как:

MarkerOptions marker = new MarkerOptions() 
         .position(LOC) 
         .snippet(user) 
         .title(name) 
         .icon(BitmapDescriptorFactory.fromBitmap(loadBitmapFromView(v1))); 

В onPostExecute, я добавляю новые маркеры, найденные в базе данных, которые еще не отображаются.

  for (int i = 0; i < markers.get(i).nl.size() - 1; i++) { 
       Marker m = googleMap.addMarker(markers.get(i).mO.get(i)); 
       markerIdMap.put(m, markers.get(i).nl.get(i)); 
      } 

Вот как я создал свою карту:

Другие лакомые кусочки:

googleMap.setClustering(new ClusteringSettings().enabled(false) 
      .addMarkersDynamically(true)); 

    googleMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() { 
     @Override 
     public void onCameraChange(CameraPosition cp) { 

      LOC = cp.target; 
      MainActivity.mLongitude = LOC.longitude; 
      MainActivity.mLatitude = LOC.latitude; 

      if (!running) { 
       new NearLocationsTask().execute(); 
      } 
     } 
    }); 

И я использую android-map-extensions

ответ

1

Я не уверен, если вы действительно создать пустое растровое изображение и масштаб его:

Bitmap bActual = Bitmap.createBitmap (v.getMeasuredWidth(), v.getMeasuredHeight(), Bitmap.Config.ARGB_8888);

Bitmap b = Bitmap.createScaledBitmap (bActual, 120, 120, true);

Если у вас много маркеров, возможно, вы пытаетесь выделить слишком много растровых изображений.

+0

Я думаю, что вы правы. В моем коде есть ошибочная логика, которая добавляет те же маркеры для каждой смены камеры. Не только новый. Вероятно, очень быстро добавляет ресурсы. – KickingLettuce

+1

У меня была такая же проблема некоторое время назад, если вы просто добавляете одни и те же маркеры, не удаляя предыдущие, очень просто свернуть приложение из-за нехватки памяти. –

 Смежные вопросы

  • Нет связанных вопросов^_^