没有连接到窗口管理器的Andr​​oid浏览 [英] android View not attached to window manager

查看:147
本文介绍了没有连接到窗口管理器的Andr​​oid浏览的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下一些例外:

  java.lang.IllegalArgumentException:如果视图没有连接到窗口管理器
在android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:355)
在android.view.WindowManagerImpl.updateViewLayout(WindowManagerImpl.java:191)
在android.view.Window $ LocalWindowManager.updateViewLayout(Window.java:428)
在android.app.Dialog.onWindowAttributesChanged(Dialog.java:596)
在android.view.Window.setDefaultWindowFormat(Window.java:1013)
在com.android.internal.policy.impl.PhoneWindow.access $ 700(PhoneWindow.java:86)
在com.android.internal.policy.impl.PhoneWindow $ DecorView.drawableChanged(PhoneWindow.java:1951)
在com.android.internal.policy.impl.PhoneWindow $ DecorView.fitSystemWindows(PhoneWindow.java:1889)
在android.view.ViewRoot.performTraversals(ViewRoot.java:727)
在android.view.ViewRoot.handleMessage(ViewRoot.java:1633)
在android.os.Handler.dispatchMessage(Handler.java:99)
在android.os.Looper.loop(Looper.java:123)
在android.app.ActivityThread.main(ActivityThread.java:4338)
在java.lang.reflect.Method.invokeNative(本机方法)
在java.lang.reflect.Method.invoke(Method.java:521)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:860)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
在dalvik.system.NativeStart.main(本机方法)
 

我用Google搜索一下,看看它有什么做的弹出式广告和旋转屏幕,但没有提到我的code。

的问题是:

  1. 有没有办法找出 什么时候这个问题 发生了什么?
  2. 在比旋转屏幕外,是否有其他事件或动作触发这个错误?
  3. 如何prevent这种情况发生?
解决方案

我有这个问题,即在一个屏幕方向的变化,AsyncTask的前活动完成完成进度对话框。我好像通过设置对话框为空的onPause(),然后解雇前的AsyncTask的检查这对解决这个问题。

  @覆盖
公共无效的onPause(){
    super.onPause();

    如果((mDialog = NULL)及!&安培; mDialog.isShowing())
        mDialog.dismiss();
    mDialog = NULL;
}
 

...在我的AsyncTask:

 在preExecute保护无效(){
    mDialog = ProgressDialog.show(mContext,,保存更改...
            真正);
}

保护无效onPostExecute(对象结果){
   如果((mDialog = NULL)及!&安培; mDialog.isShowing()){
        mDialog.dismiss();
   }
}
 

I am having some of the following exceptions:

java.lang.IllegalArgumentException: View not attached to window manager
at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:355)
at android.view.WindowManagerImpl.updateViewLayout(WindowManagerImpl.java:191)
at android.view.Window$LocalWindowManager.updateViewLayout(Window.java:428)
at android.app.Dialog.onWindowAttributesChanged(Dialog.java:596)
at android.view.Window.setDefaultWindowFormat(Window.java:1013)
at com.android.internal.policy.impl.PhoneWindow.access$700(PhoneWindow.java:86)
at com.android.internal.policy.impl.PhoneWindow$DecorView.drawableChanged(PhoneWindow.java:1951)
at com.android.internal.policy.impl.PhoneWindow$DecorView.fitSystemWindows(PhoneWindow.java:1889)
at android.view.ViewRoot.performTraversals(ViewRoot.java:727)
at android.view.ViewRoot.handleMessage(ViewRoot.java:1633)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4338)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
at dalvik.system.NativeStart.main(Native Method)

I have googled it and see that it has something to do with popups and turning the screen, but there is no reference to my code.

The questions are:

  1. is there a way to find out exactly when this issue is happening?
  2. other than turning the screen, is there another event or action that triggers this error?
  3. how do I prevent this to happen?

解决方案

I had this issue where on a screen orientation change, the activity finished before the AsyncTask with the progress dialog completed. I seemed to resolve this by setting the dialog to null onPause() and then checking this in the AsyncTask before dismissing.

@Override
public void onPause() {
    super.onPause();

    if ((mDialog != null) && mDialog.isShowing())
        mDialog.dismiss();
    mDialog = null;
}

... in my AsyncTask:

protected void onPreExecute() {
    mDialog = ProgressDialog.show(mContext, "", "Saving changes...",
            true);
}

protected void onPostExecute(Object result) {
   if ((mDialog != null) && mDialog.isShowing()) { 
        mDialog.dismiss();
   }
}

这篇关于没有连接到窗口管理器的Andr​​oid浏览的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆