我正在努力应对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>
答案 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();
}