gpt4 book ai didi

Android 在使用 MapView 的 ViewGroup.removeAllViews() 上卡住

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:53:32 26 4
gpt4 key购买 nike

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

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

此 mapView 通过 addView(mapView) 附加到父 View 。在我的程序后面的某个地方,我想通过调用 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();
}
}

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

编辑:另外,这个问题似乎只有在 map 从 public void onInfoWindowClick(final Marker marker) { 中移除时才会出现。在这个函数中,我通过 runOnUiThread() 调用了移除 View 的方法。

最佳答案

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

调用 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)。

关于Android 在使用 MapView 的 ViewGroup.removeAllViews() 上卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32841381/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com