Использование 2 простых действий. Первая активность, которая содержит только кнопку, чтобы начать 2-ую активность, которая держит карту:Google Maps Android API v2 SupportMapFragment memory leak
Основная деятельность:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void goToMap(View view){ //This is just the onClick method for the button
Intent intent=new Intent(this, BigMapTest.class);
startActivity(intent);
}
Карта активности:
public class BigMapTest extends FragmentActivity {
SupportMapFragment mapFragment;
GoogleMap map;
@Override
protected void onCreate(Bundle arg0) {
// TODO Auto-generated method stub
super.onCreate(arg0);
setContentView(R.layout.travel_diary_big_map);
mapFragment=(SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.big_map);
map=mapFragment.getMap();
}
XML-формат для отображения активности:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<fragment
android:id="@+id/big_map"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
class="com.google.android.gms.maps.SupportMapFragment"
/>
Теперь, когда я запускаю этот код, нажимая кнопку, чтобы перейти к Activity с картой, и нажимая назад, чтобы перейти к первому действию ... затем, повторив этот процесс, я вижу, что куча увеличивается каждый раз, пока он достигает своих пределов, а затем начинает зажимать. Если вы немного сокрушаетесь с картой (т. Е. Масштабирование), я могу получить исключение OOM на этом этапе.
01-25 16: 10: 13,931 D/dalvikvm (+21578): GC_FOR_ALLOC освободил 1898K, 7% бесплатно 45859K/49187K, остановился 204ms
01-25 16: 10: 14.671: Я/dalvikvm- куча (21578): Захват целевой GC-кучи от 52.724MB до 48.000MB
01-25 16: 10: 14.671: D/dalvikvm (21578): GC_CONCURRENT освобожден 2534K, 6% бесплатно 46554K/49187K, приостановлено 3ms + 14ms
01-25 16: 10: 15.372: I/dalvikvm-heap (21578): Захват целевой GC-кучи от 52.979MB до 48.000MB
01-25 16: 10: 15.382: D/dalvikvm (21578): GC_CONCURRENT освобожден 2273K, 5% бесплатно 46815K/49187K, приостановлено 3ms + 15ms
01-25 16: 10: 15.622: I/dalvikvm-heap (21578): Clam p target GC heap от 52.604MB до 48.000MB
01-25 16: 10: 15.622: D/dalvikvm (21578): GC_FOR_ALLOC освобожден 657K, 6% бесплатно 46431K/49187K, приостановлено 202 мс
01-25 16:10: 16.203: I/dalvikvm-heap (21578): Захват целевой GC-кучи от 52.959MB до 48.000MB
01-25 16: 10: 16.203: D/dalvikvm (21578): GC_FOR_ALLOC освобожден 1469K, 5% бесплатно 46796K/49187K, приостановлено 217 мс
01-25 16: 10: 16.203: I/dalvikvm-heap (21578): принудительная сборка SoftReferences для выделения 278744 байтов
01-25 16: 10: 16.423: I/dalvikvm-heap (21578) : Захват целевой GC-кучи от 52.952MB до 48.000MB
01-25 16: 10: 16.423: D/dalvikvm (21578): GC_BEFORE_OOM освобожден 9K, 5% бесплатно 46786K/49187K, приостановлено 219ms
01-25 16: 10: 16.423: E/dalvikvm-heap (21578): Недостаточно памяти при распределении 278744 байта.
Любые предложения/помощь будут оценены.
Используйте MAT для определения источника утечки. – CommonsWare
Использование MAT, а затем поиск объекта с самым большим сохраненным размером (который продолжает расти с каждым циклом), а затем используя путь к корням GC, исключая слабые ссылки, я достиг следующего: class maps.by.a @ 0x414f7fa8 System Class. - Но я не знаю, что делать дальше. – Nims
Кажется, что что-то накапливается в Hashmap: класс «maps.by.a», загруженный «dalvik.system.PathClassLoader @ 0x413de740», занимает 12,923,112 (57,78%) байт. Память накапливается в одном экземпляре «java.util.HashMap $ HashMapEntry []», загружаемом «<загрузчик системного класса>». Ключевые слова java.util.HashMap $ HashMapEntry [] maps.by.a dalvik.system.PathClassLoader @ 0x413de740 – Nims