過去幾天我已經閱讀了許多類似的帖子,但都沒有明確回答這個問題。經過2分鐘積極的地圖平移和混合地圖縮放後,我開始遇到OOM問題。該應用程序似乎在崩潰後仍保留在內存中,因爲在第一次失敗後需要較少的時間才能到達OOM。我將代碼縮小到只有一個帶有MapFragment的Activity,並且仍然獲得相同的OOM。我已經使用DDMS和MAT來嘗試和隔離問題,除了添加android:largeHeap="true"
這隻會延遲OOM。屏幕重新定位不是問題,因爲我在我的清單中設置了android:screenOrientation="portrait"
。任何幫助,將不勝感激。MapFragment Google Maps API v2內存不足錯誤/內存泄漏
更新2014年8月25日:This is supposed to be fixed back in May 2013?
更新2014年9月6日:仍然沒有成功,唯一的好選擇是使用Normal
而不是Hybrid
。 GC似乎能夠保持沒有圖像。
類似的帖子:
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:
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
模擬器或設備? – Simas 2014-08-28 17:57:28
@ user3249477 - 在設備上運行。在GS4和GS5上都崩潰。 – spidermonkey 2014-08-28 18:06:09
哦,沒關係,沒有讀取~2分鐘的積極地圖平移和縮放部分... – Simas 2014-08-28 18:08:23