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

前端之家收集整理的这篇文章主要介绍了Android使用MapView在ViewGroup.removeAllViews()上冻结前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

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

编辑:

我使用CustomMapView做了一些更多的研究:

  1. import android.content.Context;
  2. import android.view.View;
  3. import com.google.android.gms.maps.MapView;
  4. /**
  5. * @author Daniël van den Berg
  6. * @date 9/30/2015.
  7. */
  8. public class CustomMapView extends MapView {
  9. public CustomMapView(Context context) {
  10. super(context);
  11. }
  12. @Override
  13. public void onViewRemoved(View child) {
  14. super.onViewRemoved(child);
  15. }
  16. @Override
  17. protected void onDetachedFromWindow() {
  18. super.onDetachedFromWindow();
  19. }
  20. public void remove() {
  21. onPause();
  22. onDestroy();
  23. }
  24. }

我在尝试删除视图之前调用了remove方法,这就是它挂起的地方. onPause上的断点确实被触发,但onDestroy上的断点没有触发.它在创建时调用onCreate()和onResume().调用onDestroy()而不调用onPause()确实有效,但removeView(child)再次挂起.显然onPause挂起我的应用程序.有没有人对我能做些什么来弄清楚问题是什么?

编辑:
还有一个补充,这个问题似乎只发生在从公开的void onInfoWindowClick(最终标记标记){.在这个函数中,我调用通过runOnUiThread()删除视图的方法.

最佳答案
好吧,这个花了我一段时间,但我终于明白了.它似乎是一个bug或者没有记录得很好的东西.但显然从中调用了MapView.onPause()

  1. @Override
  2. public void onInfoWindowClick(final Marker marker) {

不起作用.这将挂起应用程序.我通过以下方式解决了这个问题:

  1. @Override
  2. public void onInfoWindowClick(final Marker marker) {
  3. new Handler().postDelayed(
  4. new Runnable() {
  5. @Override
  6. public void run() {
  7. MainActivity.getInstance().runOnUiThread(
  8. new Runnable() {
  9. @Override
  10. public void run() {
  11. myMethods();
  12. }
  13. });
  14. }
  15. },1);

现在它完美无缺.我会将此报告为Google的错误(https://code.google.com/p/gmaps-api-issues/issues/detail?id=8681).

猜你在找的Android相关文章