Android Google Maps API v2的内存泄漏

时间:2013-04-15 19:04:45

标签: android google-maps memory-leaks

我正在努力应对Google Maps Android API v2中的内存泄漏问题。每次我的视图在以下情况后再次可见时,堆使用量会增加大约85KB:

  • 手机屏幕关闭(例如,按下电源按钮后)。
  • 用户按主页按钮退出应用程序。

该应用最终因 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>

2 个答案:

答案 0 :(得分:3)

这可能与Maps API中的这个未解决的问题有关:

Issue 4766 - Bug: Android Maps API v2 leaks huge amounts of memory

使用DDMS'“转储HPROF”工具转储hprof文件,将其转换为hprof-conv并使用MAT检查泄漏。如果它位于Google Maps API中,请将apk(或更简单的测试代码)发布到未解决的问题并包含hprof文件。

如果是我遇到的同一个错误,它可能只发生在Android 2.x上,请检查一下。

答案 1 :(得分: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();
}