android.view.WindowLeaked:Activity已泄漏窗口android.widget.ZoomButtonsController $ Container最初在这里添加

时间:2014-12-02 16:44:10

标签: maps osmdroid

使用地图我有一个活动,当没有可用的连接时启动,并使用离线地图(MapQuest)。活动运行正常,显示地图,以及所有叠加,标记等。当用户点击其中一个标记信息窗口时,将启动另一个活动,此时我在日志中收到一堆红色错误消息,但应用程序不会崩溃。这些消息(init在标题中)似乎谈论了ZoomButtons和触摸事件。对于代码中的ZoomButtons或触摸事件(多点触控),只有两行:

map.setBuiltInZoomControls(true);
map.setMultiTouchControls(true);

而不是任何对话......

  • 如果我写:

    map.setBuiltInZoomControls(假); map.setMultiTouchControls(假);

红色错误消息消失但当然用户无法以任何方式放大或缩小...

由于错误(带有“true”参数)仅在启动另一个活动时发生,我认为我必须在pause()中添加一些内容,即:

onPause(){
map.setBuiltInZoomControls(false);
map.setMultiTouchControls(false);
super.OnPause();
}

----但这样做并没有改变任何事情...... 任何提示??? - 提前致谢!

3 个答案:

答案 0 :(得分:15)

将此添加到您的活动中:

@Override
public void finish() {
    ViewGroup view = (ViewGroup) getWindow().getDecorView();
    view.removeAllViews();
    super.finish();
}

答案 1 :(得分:8)

我遇到了完全相同的问题...感谢您指出它是由(可能)当缩放控件仍然可见时引起的。我测试了它,这是正确的。当我按下显示变焦控制的后退按钮时,如果我等到控件逐渐消失(它们在你停止滚动后就会这样做),它会显示泄漏错误,然后没有泄漏错误。

WebSettings中的一项研究提供了一种不显示缩放控件的方法,这意味着在您想要按下后退按钮的任何时候它都不会泄漏。它仍然可以通过捏合效果进行缩放。使用此方法的唯一缺点是您的控件无法显示。但对我来说,这是值得的,因为大多数用户都知道所有应用的缩放缩放。

以下是我使用的内容:

// make sure your pinch zoom is enabled
 webView.getSettings().setBuiltInZoomControls(true);

// don't show the zoom controls
 webView.getSettings().setDisplayZoomControls(false);

答案 2 :(得分:1)

此泄漏窗口的问题未出现在以下版本的Android 3.0中,因此,您可以尝试执行此操作:

    // enabled zoom support
    getSettings().setSupportZoom(true);
    getSettings().setBuiltInZoomControls(true);

    // but,We should hide this button, otherwise in the version
    // of Android 3 and above, there is a window leak.
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        // call requies API Level 11 ( Android 3.0 + )
        getSettings().setDisplayZoomControls(false);
    }