2014-08-27 5 views
5

Ho letto un numero di post simili negli ultimi giorni, ma nessuno che risponda specificamente a questo problema. Inizio a ottenere un problema con OOM dopo ~ 2 minuti di panoramica e zoom aggressivi con la mappa ibrida. L'app sembra anche conservare la memoria dopo l'arresto perché richiede meno tempo per raggiungere OOM dopo il primo errore. Ho ridimensionato il codice solo per un'attività con MapFragment e ancora ottengo la stessa OOM. Ho usato DDMS e MAT per provare e isolare il problema, oltre ad aggiungere android:largeHeap="true" che ritarda solo l'OOM. Il riorientamento dello schermo non è un problema perché sto impostando android:screenOrientation="portrait" nel mio manifest. Qualsiasi aiuto sarebbe apprezzato.MapFragment API di Google Maps v2 Errore di memoria insufficiente/perdita di memoria

Aggiornamento 2014/08/25: This is supposed to be fixed back in May 2013?

Aggiornamento 2014/09/06: Ancora senza successo, l'unica opzione è quella di utilizzare buona Normal invece di Hybrid. GC sembra essere in grado di tenere il passo senza le immagini.

Posts simili:

Out of memory error when using Google Maps API

Memory leak for Android Google Maps API v2

Android Google maps API, OutOfMemoryError

MainActivity:

public class MainActivity_blank extends Activity { 

GoogleMap mMap; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //setContentView(R.layout.activity_main_activity_blank); 
    setContentView(R.layout.map_fragment); 

    setUpMapIfNeeded(); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main_activity_blank, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

private void setUpMapIfNeeded() { 
    // Do a null check to confirm that we have not already instantiated the map. 
    if (mMap == null) { 
     mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); 
     // Check if we were successful in obtaining the map. 
     if (mMap != null) { 
      // The Map is verified. It is now safe to manipulate the map. 
      //startUsingMap(); 
      mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); 
     } 
    } 
} 
} 

logcat:

0.123.516,410617 millions
08-26 17:15:29.302: I/dalvikvm-heap(19642): Forcing collection of SoftReferences for 67108880-byte allocation 
08-26 17:15:29.372: D/dalvikvm(19642): GC_BEFORE_OOM freed 822K, 65% free 37523K/106080K, paused 78ms, total 78ms 
08-26 17:15:30.582: W/dalvikvm(19642): chunk is too big to transmit (length=49579336, 48435 bytes) 
08-26 17:15:31.532: E/dalvikvm-heap(19642): Out of memory on a 67108880-byte allocation. 
08-26 17:15:31.532: I/dalvikvm(19642): "GLThread 14876" prio=5 tid=19 RUNNABLE 
08-26 17:15:31.532: I/dalvikvm(19642): | group="main" sCount=0 dsCount=0 obj=0x42c120d8 self=0x787e8438 
08-26 17:15:31.532: I/dalvikvm(19642): | sysTid=19729 nice=1 sched=0/0 cgrp=apps handle=2021558416 
08-26 17:15:31.532: I/dalvikvm(19642): | state=R schedstat=(51120733635 13119596807 80537) utm=1904 stm=3208 core=0 
08-26 17:15:31.532: I/dalvikvm(19642): at android.graphics.Bitmap.nativeCreate(Native Method) 
08-26 17:15:31.532: I/dalvikvm(19642): at android.graphics.Bitmap.createBitmap(Bitmap.java:924) 
08-26 17:15:31.532: I/dalvikvm(19642): at android.graphics.Bitmap.createBitmap(Bitmap.java:901) 
08-26 17:15:31.532: I/dalvikvm(19642): at android.graphics.Bitmap.createBitmap(Bitmap.java:868) 
08-26 17:15:31.532: I/dalvikvm(19642): at opl.a((null):-1) 
08-26 17:15:31.532: I/dalvikvm(19642): at okg.a((null):-1) 
08-26 17:15:31.532: I/dalvikvm(19642): at opy.a((null):-1) 
08-26 17:15:31.532: I/dalvikvm(19642): at opx.a((null):-1) 
08-26 17:15:31.532: I/dalvikvm(19642): at ojx.a((null):-1) 
08-26 17:15:31.532: I/dalvikvm(19642): at ojx.b((null):-1) 
08-26 17:15:31.532: I/dalvikvm(19642): at otq.k((null):-1) 
08-26 17:15:31.532: I/dalvikvm(19642): at otq.run((null):-1) 
08-26 17:15:31.542: W/System.err(19642): OutOfMemory 
08-26 17:15:31.642: D/dalvikvm(19642): GC_EXPLICIT freed 4803K, 64% free 38238K/106080K, paused 6ms+11ms, total 102ms 
08-26 17:15:32.822: W/dalvikvm(19642): chunk is too big to transmit (length=49444016, 48303 bytes) 
08-26 17:15:33.682: D/dalvikvm(19642): GC_FOR_ALLOC freed 3728K, 66% free 36916K/106080K, paused 65ms, total 65ms 
08-26 17:15:34.752: W/dalvikvm(19642): chunk is too big to transmit (length=49398928, 48259 bytes) 
08-26 17:15:35.462: I/dalvikvm-heap(19642): Forcing collection of SoftReferences for 67108880-byte allocation 
08-26 17:15:35.512: D/dalvikvm(19642): GC_BEFORE_OOM freed 413K, 66% free 36502K/106080K, paused 52ms, total 52ms 
08-26 17:15:36.742: W/dalvikvm(19642): chunk is too big to transmit (length=49398928, 48259 bytes) 
08-26 17:15:37.282: E/dalvikvm-heap(19642): Out of memory on a 67108880-byte allocation. 
08-26 17:15:37.282: I/dalvikvm(19642): "GLThread 14876" prio=5 tid=19 RUNNABLE 
08-26 17:15:37.282: I/dalvikvm(19642): | group="main" sCount=0 dsCount=0 obj=0x42c120d8 self=0x787e8438 
08-26 17:15:37.282: I/dalvikvm(19642): | sysTid=19729 nice=1 sched=0/0 cgrp=apps handle=2021558416 
08-26 17:15:37.282: I/dalvikvm(19642): | state=R schedstat=(54770836691 14106993077 84458) utm=1996 stm=3481 core=0 
08-26 17:15:37.282: I/dalvikvm(19642): at android.graphics.Bitmap.nativeCreate(Native Method) 
08-26 17:15:37.282: I/dalvikvm(19642): at android.graphics.Bitmap.createBitmap(Bitmap.java:924) 
08-26 17:15:37.282: I/dalvikvm(19642): at android.graphics.Bitmap.createBitmap(Bitmap.java:901) 
08-26 17:15:37.282: I/dalvikvm(19642): at android.graphics.Bitmap.createBitmap(Bitmap.java:868) 
08-26 17:15:37.282: I/dalvikvm(19642): at opl.a((null):-1) 
08-26 17:15:37.282: I/dalvikvm(19642): at okg.a((null):-1) 
08-26 17:15:37.282: I/dalvikvm(19642): at opy.a((null):-1) 
08-26 17:15:37.282: I/dalvikvm(19642): at opx.a((null):-1) 
08-26 17:15:37.282: I/dalvikvm(19642): at ojx.a((null):-1) 
08-26 17:15:37.282: I/dalvikvm(19642): at ojx.b((null):-1) 
08-26 17:15:37.282: I/dalvikvm(19642): at otq.k((null):-1) 
08-26 17:15:37.282: I/dalvikvm(19642): at otq.run((null):-1) 
08-26 17:15:37.432: W/dalvikvm(19642): threadid=19: thread exiting with uncaught exception (group=0x4178cda0) 
08-26 17:15:37.442: E/AndroidRuntime(19642): FATAL EXCEPTION: GLThread 14876 
08-26 17:15:37.442: E/AndroidRuntime(19642): Process: com.example.maptest, PID: 19642 
08-26 17:15:37.442: E/AndroidRuntime(19642): java.lang.OutOfMemoryError 
08-26 17:15:37.442: E/AndroidRuntime(19642): at android.graphics.Bitmap.nativeCreate(Native Method) 
08-26 17:15:37.442: E/AndroidRuntime(19642): at android.graphics.Bitmap.createBitmap(Bitmap.java:924) 
08-26 17:15:37.442: E/AndroidRuntime(19642): at android.graphics.Bitmap.createBitmap(Bitmap.java:901) 
08-26 17:15:37.442: E/AndroidRuntime(19642): at android.graphics.Bitmap.createBitmap(Bitmap.java:868) 
08-26 17:15:37.442: E/AndroidRuntime(19642): at opl.a(Unknown Source) 
08-26 17:15:37.442: E/AndroidRuntime(19642): at okg.a(Unknown Source) 
08-26 17:15:37.442: E/AndroidRuntime(19642): at opy.a(Unknown Source) 
08-26 17:15:37.442: E/AndroidRuntime(19642): at opx.a(Unknown Source) 
08-26 17:15:37.442: E/AndroidRuntime(19642): at ojx.a(Unknown Source) 
08-26 17:15:37.442: E/AndroidRuntime(19642): at ojx.b(Unknown Source) 
08-26 17:15:37.442: E/AndroidRuntime(19642): at otq.k(Unknown Source) 
08-26 17:15:37.442: E/AndroidRuntime(19642): at otq.run(Unknown Source) 
08-26 17:15:37.522: D/AbsListView(19642): unregisterIRListener() is called 
08-26 17:15:38.092: D/AbsListView(19642): onDetachedFromWindow 
08-26 17:15:38.092: D/AbsListView(19642): unregisterIRListener() is called 
08-26 17:15:38.102: D/AbsListView(19642): onVisibilityChanged() is called, visibility : 8 
08-26 17:15:38.102: D/AbsListView(19642): unregisterIRListener() is called 
+0

Emulatore o dispositivo? – Simas

+0

@ user3249477 - In esecuzione sul dispositivo. Si blocca sia su un GS4 che su GS5. – spidermonkey

+0

Oh non importa, non ha letto il '~ 2 minuti di mappa panning aggressivo e parte zooming' ... – Simas

risposta

0

provare la mappa di chiamata onPausa, onResume, onLowMemory nei metodi Frammento corrispondenti.

+0

Metodi aggiunti e ho ancora esperienza con OOM. onLowMemory viene chiamato solo quando "l'intero sistema sta esaurendo la memoria, non quando il processo sta esaurendo la memoria".onPause e onResume non vengono chiamati in questo scenario in quanto l'utente non lascia mai la mappa. – spidermonkey

0

Mi sono imbattuto in questo problema cercando di eseguire un'applicazione in modalità demo per alcune ore alla volta. Non importa cosa ho provato, dopo 30 minuti, vedrei questo crash senza un report di stack leggibile.

Ho provato molte cose diverse ma questa era l'unica cosa che ha funzionato per me. Non è una correzione per il bug della mappa, ma ha impedito alla mia app di bloccarsi:

<application 
    ... 
    android:largeHeap="true">