Android 使用 MapView 在 ViewGroup.removeAllViews() 上冻结

Android freezes on ViewGroup.removeAllViews() with MapView

我有一个动态创建的 com.google.android.gms.maps.MapView,使用

mapView = new MapView(DataManager.getInstance().getContext());

此 mapView 通过 addView(mapView) 附加到父项。在我的程序后面的某个地方,我想通过调用 parent.removeAllViews(); 来删除这个 mapView,但是 android 只是停滞了。该应用程序完全冻结,我不知道为什么。我该怎么做才能解决这个问题?

编辑:

我使用 CustomMapView:

做了更多研究
import android.content.Context;
import android.view.View;

import com.google.android.gms.maps.MapView;

/**
 * @author Daniël van den Berg
 * @date 9/30/2015.
 */
public class CustomMapView extends MapView {
    public CustomMapView(Context context) {
        super(context);
    }

    @Override
    public void onViewRemoved(View child) {
        super.onViewRemoved(child);
    }

    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
    }


    public void remove() {
        onPause();
        onDestroy();
    }
}

我在尝试删除视图之前调用了删除方法,这就是它挂起的地方。 onPause 处的断点确实会被触发,但 onDestroy 处的断点不会。创建时,我同时调用 onCreate()onResume()。在不调用 onPause() 的情况下调用 onDestroy() 确实有效,但 removeView(child) 再次挂起。所以显然 onPause 挂了我的应用程序。有人知道我可以做什么来找出问题所在吗?

编辑: 另外,这个问题似乎只在地图从 public void onInfoWindowClick(final Marker marker) { 中删除时才会出现。在这个函数中我调用了通过 runOnUiThread().

删除视图的方法

好的,这个花了我一段时间,但我终于弄明白了。它似乎是一个错误或没有很好记录的东西。但显然从

调用 MapView.onPause()
@Override
    public void onInfoWindowClick(final Marker marker) {

不起作用。这将挂起应用程序。我通过执行以下操作解决了这个问题:

@Override
public void onInfoWindowClick(final Marker marker) {
    new Handler().postDelayed(
            new Runnable() {
                @Override
                public void run() {
                    MainActivity.getInstance().runOnUiThread(
                            new Runnable() {
                                @Override
                                public void run() {
                                    myMethods();
                                }
                            });
                }
            }, 1);

现在它工作得很好。我会将此作为错误报告给 Google (https://code.google.com/p/gmaps-api-issues/issues/detail?id=8681)。