Я борюсь с проблемой утечки памяти в 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>
Это может быть связано с этой открытой проблемой в API Карт:
Проблема 4766 - Ошибка: Android Maps API v2 утечки огромного объема памяти
Используйте инструмент DDMS "Дамп HPROF", чтобы выгрузить файл hprof, преобразовать его с помощью hprof-conv
и использовать MAT, чтобы изучить протечь. Если в API Карт Google, отправьте apk (или лучший простой тестовый код) на открытую проблему и включите файл hprof.
Если это та самая ошибка, с которой я столкнулся, это может произойти только на Android 2.x, пожалуйста, проверьте это тоже.
Я попытался использовать 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();
}