2010-07-31 69 views
15

我從客戶端遠程獲取以下內容,因此我不知道它們使用的是什麼硬件等。錯誤:查看未連接到窗口管理器

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

那麼這是什麼意思?我認爲這與活動被破壞然後創建有關,但正如你所看到的,我已經正確設置了configChanges。

+0

我見過類似的東西。如果在顯示進度對話框時按Home或Back,您可能會遇到此錯誤。 – 2010-07-31 17:00:34

+0

看到這個答案,如果你想使用onConfigurationChange調用,而不是重新創建活動http://stackoverflow.com/a/2418763/117220 – 2013-05-22 03:45:29

+0

接受一個答案,如果有什麼幫助 – Br0thazS0ul 2013-08-20 14:16:21

回答

3

它通常發生在活動結束後致電解僱。

21

嘗試:

if (pDialog.isShowing()) { 
    pDialog.cancel(); 
} 
在覆蓋 onDestroy()onStop()方法

+0

thanx作品像魔術...... – Richa 2013-04-25 05:56:40

+2

令人驚訝的是,在一些例外仍然可以出現。我有一個空檢查和isShowing檢查,當我改變方向時,我仍然得到異常。 – 2013-05-14 09:07:47

+0

更改方向,重建當前活動。 – Ajay 2013-05-14 09:31:04

1

當我嘗試關閉Web視圖的onPageFinished方法中的對話框時,Im也面臨同樣的問題。 有時在活動關閉後調用onPageFinished。

這裏是解決方案,這:

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

    } 

試試吧!

13

在退出Activity後嘗試顯示對話框時會出現此問題。

我只是解決了這個問題,只是寫下下面的代碼:

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

} 

基本上,從哪個類,你開始progressDialog,覆蓋onDestroy()方法,做這種方式。它解決了活動泄漏窗口的問題。

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); 
    } 
} 
+0

什麼是test_service_overlay? – 2017-07-26 13:51:47

0

你也可以問「dialog.isIndeterminate()」。工作正常。

相關問題