Утечка памяти для Android Google Maps API v2

1

Я борюсь с проблемой утечки памяти в Google Maps Android API v2. Использование кучи увеличивается примерно на 85 КБ каждый раз, когда мой вид становится видимым снова:

  • Экран телефона отключается (например, после нажатия кнопки питания).
  • Пользователь выйдет из приложения, нажав кнопку "Домой".

Приложение в конечном итоге выходит из строя с исключением OutOfMemory. Утечка НЕ ​​происходит при повороте экрана или при выходе с помощью кнопки "назад". Любые идеи об обходном пути или причине этой проблемы?

Мой код:

public class LeakActivity extends FragmentActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_leak);
    }
}

и XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/myLayout"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<fragment
    android:id="@+id/map_1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.google.android.gms.maps.SupportMapFragment" />

</RelativeLayout>
  • 0
    Возможный дубликат stackoverflow.com/questions/14523949/…
  • 0
    @TobiasMoeThorstensen не дубликат
Теги:
google-maps
memory-leaks

2 ответа

3

Это может быть связано с этой открытой проблемой в API Карт:

Проблема 4766 - Ошибка: Android Maps API v2 утечки огромного объема памяти

Используйте инструмент DDMS "Дамп HPROF", чтобы выгрузить файл hprof, преобразовать его с помощью hprof-conv и использовать MAT, чтобы изучить протечь. Если в API Карт Google, отправьте apk (или лучший простой тестовый код) на открытую проблему и включите файл hprof.

Если это та самая ошибка, с которой я столкнулся, это может произойти только на Android 2.x, пожалуйста, проверьте это тоже.

1

Я попытался использовать System.gc() и map.clear() перед инициализацией карты.

  @Override
public void onActivityCreated (Bundle savedInstanceState){
    super.onActivityCreated(savedInstanceState);

    if (GooglePlayServicesUtil.isGooglePlayServicesAvailable(getActivity()) == ConnectionResult.SUCCESS) {
        System.gc();
getMap().clear();
setupmap();


    }
}
 @Override
public void onLowMemory() {
  super.onLowMemory();
System.gc();
}
  • 4
    Как вы можете настроить getMap (). Clear (); перед инициализацией карты, конечно, это должно вернуть nullpointerexecption. Пожалуйста, перепроверьте свой пост

Ещё вопросы

Сообщество Overcoder
Наверх
Меню