【问题标题】:Error: View not attached to window manager错误:视图未附加到窗口管理器
【发布时间】:2011-03-23 15:05:28
【问题描述】:

我从客户端远程获取以下信息,所以我不知道他们正在使用什么硬件等。

java.lang.IllegalArgumentException: View not attached to window manager
       at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:355)
       at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:200)
       at android.view.Window$LocalWindowManager.removeView(Window.java:417)
       at android.app.Dialog.dismissDialog(Dialog.java:279)
       at android.app.Dialog.access$000(Dialog.java:72)
       at android.app.Dialog$1.run(Dialog.java:108)
       at android.app.Dialog.dismiss(Dialog.java:263)
       at com..mysite.android.ActivityGame$1.onFinish(ActivityGame.java:154)
       at android.os.CountDownTimer$1.handleMessage(CountDownTimer.java:118)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:123)
       at android.app.ActivityThread.main(ActivityThread.java:4203)
       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:799)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)

这是因为 ProgressDialog

    progressDialog = new ProgressDialog( this );
    progressDialog.setMessage(getString(R.string.get_ready));
    progressDialog.setCancelable(false);
    progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    progressDialog.setMax(12);
    progressDialog.show();

    new CountDownTimer(3000, 250) {

         @Override
        public void onTick(long millisUntilFinished) {
             //progressDialog.incrementProgressBy(1);
         }

         @Override
        public void onFinish() {
             progressDialog.dismiss(); //********* ERROR HAPPENS HERE *********
             nextQuestion();
         }
    }.start();

Activity 在 Manifest 中如下所示。

<activity android:theme="@style/GameTheme" android:name=".ActivityGame" android:screenOrientation="portrait" android:launchMode="singleTask" android:configChanges="keyboardHidden|orientation"></activity>

那么这意味着什么?我认为这与 Activity 被销毁然后创建有关,但正如您所见,我的 configChanges 设置正确。

【问题讨论】:

  • 我见过类似的东西。如果在显示进度对话框时按 Home 或 Back,您可能会收到此错误。
  • 如果您想使用 onConfigurationChange 调用而不是重新创建活动stackoverflow.com/a/2418763/117220,请查看此答案
  • 如果有任何帮助,请接受答案

标签: android


【解决方案1】:

您也可以询问“dialog.isIndeterminate()”。工作正常。

【讨论】:

    【解决方案2】:

    为了处理不可见的视图,你不能使用 isShowing() 并且应该在你的 onDestroy() 中检查窗口附件本身

    if (pDialog.getWindowToken() != null)
    {
       pDialog.dismiss();
    }
    

    或者在我的情况下,我使用的不是对话框,而是由 WindowManager 添加的自定义窗口,它(可能)是不可见的。

    if (test_service_overlay != null) {
         if (test_service_overlay.getWindowToken() != null) {
             WindowManager windowManager = (WindowManager) getBaseContext().getSystemService(Context.WINDOW_SERVICE);
             windowManager.removeViewImmediate(test_service_overlay);
         }
    }
    

    【讨论】:

    • 什么是 test_service_overlay?
    【解决方案3】:

    试试:

    if (pDialog.isShowing()) {
       pDialog.cancel();
    }
    

    在您覆盖的 onDestroy()onStop() 方法中。

    【讨论】:

    • 令人惊讶的是,在某些情况下仍然会出现异常。我有一个空检查和 isShowing 检查,当我改变方向时我仍然得到异常。
    【解决方案4】:

    在您退出 Activity 后尝试显示对话框时会出现此问题。

    我只是通过写下以下代码解决了这个问题:

    public void onDestroy(){
    super.onDestroy();
    if(progressDialog!=null)
    if(progressDialog.isShowing()){
    progressDialog.cancel();
    }
    
    }
    

    基本上,您从哪个类开始progressDialog,覆盖onDestroy() 方法并这样做。它解决了 Activity 已泄露窗口 问题。

    【讨论】:

      【解决方案5】:

      当我试图在 Web 视图的 onPageFinished 方法中关闭对话框时,我也遇到了同样的问题。 有时在活动关闭后调用 onPageFinished。

      解决方法如下:

          if(pDialog.isShowing())
          {
            try
            {
              pDialog.dismiss();
            }
            catch(Exception e) {// nothing }
      
          }
      

      试试吧!

      【讨论】:

        【解决方案6】:

        这通常发生在您在活动关闭后调用dismiss时。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-05-20
          • 2012-06-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-01
          • 2011-01-14
          相关资源
          最近更新 更多