1

我正在努力解决 Google Maps Android API v2 的内存泄漏问题。每次我的视图再次可见时,堆使用量增加约 85KB:

  • 电话屏幕关闭(例如按下电源按钮后)。
  • 用户按 Home 按钮退出应用程序。

该应用程序最终会因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>
4

2 回答 2

3

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

问题 4766 - 错误:Android Maps API v2 泄漏大量内存

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

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

于 2013-05-03T10:17:38.923 回答
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();
}
于 2013-06-06T07:21:14.647 回答