Эта ошибка не происходит, когда карта нагрузки, но после перемещения положения карты в другие места и новые маркеры появляются ...Из ошибки памяти - при добавлении маркеров в 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
Я думаю, что вы правы. В моем коде есть ошибочная логика, которая добавляет те же маркеры для каждой смены камеры. Не только новый. Вероятно, очень быстро добавляет ресурсы. – KickingLettuce
У меня была такая же проблема некоторое время назад, если вы просто добавляете одни и те же маркеры, не удаляя предыдущие, очень просто свернуть приложение из-за нехватки памяти. –