2016-03-22 4 views
1

В моем проекте у меня есть MainActivity A (который обрабатывает навигацию приложения), фрагмент 1 (gridview), фрагмент 2 (карта).Maps API Memory Leak

Я вызываю фрагмент фрагмента из фрагмента сетки (отображающий маркер выбранной записи), используя обратный вызов в mainactivity, который заменяет фрагмент карты, помещая некоторые аргументы (для сведений о маркерах).

Все работает до сих пор, но после того, как определенное время вызова фрагмента карты получает OutOfMemory исключения:

FATAL EXCEPTION: GLThread 400 Process: XXX , PID: 2378 
java.lang.OutOfMemoryError: Failed to allocate a 4194316 byte allocation with 684253 free bytes and 668KB until OOM 
at dalvik.system.VMRuntime.newNonMovableArray(Native Method) 
at android.graphics.Bitmap.nativeCreate(Native Method) 
at android.graphics.Bitmap.createBitmap(Bitmap.java:812) 
at android.graphics.Bitmap.createBitmap(Bitmap.java:789) 
at android.graphics.Bitmap.createBitmap(Bitmap.java:756) 
at com.google.maps.api.android.lib6.gmm6.m.c.i.a(Unknown Source) 
at com.google.maps.api.android.lib6.gmm6.m.c.l.a(Unknown Source) 
at com.google.maps.api.android.lib6.gmm6.m.c.l.a(Unknown Source) 
at com.google.maps.api.android.lib6.gmm6.m.c.l.b(Unknown Source) 
at com.google.maps.api.android.lib6.gmm6.m.c.b.ak.a(Unknown Source) 
at com.google.maps.api.android.lib6.gmm6.m.c.b.as.a(Unknown Source) 
at com.google.maps.api.android.lib6.gmm6.m.x.a(Unknown Source) 
at com.google.maps.api.android.lib6.gmm6.m.l.a(Unknown Source) 
at com.google.maps.api.android.lib6.gmm6.m.l.b(Unknown Source) 
at com.google.maps.api.android.lib6.gmm6.m.cj.g(Unknown Source) 
at com.google.maps.api.android.lib6.gmm6.m.cj.run(Unknown Source) 

Пробовал temporarly удалить растровые изображения для карты маркеров пользовательского InfoWindow и так далее, на самом деле не влияют. Память увеличивается и увеличивается каждый раз при замене фрагмента карты.

Любая идея о том, как обращаться/уничтожить старую карту, попыталась несколькими способами и рассмотрела несколько вопросов, но не нашла правильного решения.

+0

Это исключение, как правило, происходит только тогда, когда вы рисуете две карты одновременно на одной и той же layout..Check, которые вам вызов метода создания карты дважды? –

+0

Вы можете использовать [LeakCanary] (https://github.com/square/leakcanary) для обнаружения утечек памяти. – Ziem

+0

Вы имеете в виду метод getMapAsync()? который вызывается только один раз в onResume. также попытался уничтожить карту map.clear() в onDestroy, но, как прочитано в других вопросах, это не будет иметь никакого эффекта. – Norman

ответ

-1

добавить это в вашем файле манифеста

android:largeHeap="true" 

Для получения более подробной информации читайте это, http://developer.android.com/guide/topics/manifest/application-element.html

+0

уже пробовал это, не помог – Norman

+0

, если вы загружаете изображения в gridview, затем уменьшаете изображение и загружаете их, что уменьшит использование памяти. –

+0

как я писал, временно удалял растровые изображения, не решая проблему. даже используя picasso для изображений gridview – Norman