
我有一个动态创建的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(); }}我在尝试删除视图之前调用了remove方法,这就是它挂起的地方. onPause上的断点确实被触发,但onDestroy上的断点没有触发.它在创建时调用onCreate()和onResume().调用onDestroy()而不调用onPause()确实有效,但removeVIEw(child)再次挂起.显然onPause挂起我的应用程序.有没有人对我能做些什么来弄清楚问题是什么?
编辑:
还有一个补充,这个问题似乎只发生在从公开的voID onInfoWindowClick(最终标记标记){.在这个函数中,我调用通过runOnUiThread()删除视图的方法.最佳答案好吧,这个花了我一段时间,但我终于明白了.它似乎是一个BUG或者没有记录得很好的东西.但显然从中调用了MapVIEw.onPause()
@OverrIDe public voID onInfoWindowClick(final Marker marker) {不起作用.这将挂起应用程序.我通过以下方式解决了这个问题:
@OverrIDepublic 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()上冻结全部内容,希望文章能够帮你解决Android使用MapView在ViewGroup.removeAllViews()上冻结所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)