AndroidRuntime: FATAL EXCEPTION: mainAndroidRuntime: java.lang.IllegalArgumentException: View not attached to window managerAndroidRuntime: at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:385)AndroidRuntime: at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:287)AndroidRuntime: at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:79)AndroidRuntime: at android.app.Dialog.dismissDialog(Dialog.java:323)AndroidRuntime: at android.app.Dialog.dismiss(Dialog.java:306)AndroidRuntime: at com.android.stk.StkDialogActivity$4.onClick(StkDialogActivity.java:188)AndroidRuntime: at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:169)AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99)AndroidRuntime: at android.os.Looper.loop(Looper.java:153)AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5299)AndroidRuntime: at java.lang.reflect.Method.invokeNative(Native Method)AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:511)AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)AndroidRuntime: at dalvik.system.NativeStart.main(Native Method)
比如在界面上显示一个Dialog,当任务处理结束后再Dismiss Dialog。如果在Dialog显示期间,该Activity因为某种原因被杀掉且又重新启动了,那么当任务结束时,Dismiss Dialog的时候WindowManager检查,就会发现该Dialog所属的Activity已经不存在了(重新启动了一次,是一个新的Activity),所以会报IllegalArgumentException: View not attached to window manager.
WindowManager: Activity com.android.stk.StkDialogActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{41fea228 V.E..... R.....ID 0,0-1026,433} that was originally added hereWindowManager: android.view.WindowLeaked: Activity com.android.stk.StkDialogActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{41fea228 V.E..... R.....ID 0,0-1026,433} that was originally added hereWindowManager: at android.view.ViewRootImpl.<init>(ViewRootImpl.java:409)WindowManager: at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:218)WindowManager: at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)WindowManager: at android.app.Dialog.show(Dialog.java:281)WindowManager: at android.app.AlertDialog$Builder.show(AlertDialog.java:951)WindowManager: at com.android.stk.StkDialogActivity.onCreate(StkDialogActivity.java:192)WindowManager: at android.app.Activity.performCreate(Activity.java:5122)WindowManager: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)WindowManager: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270)WindowManager: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)WindowManager: at android.app.ActivityThread.access$600(ActivityThread.java:156)WindowManager: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1340)WindowManager: at android.os.Handler.dispatchMessage(Handler.java:99)WindowManager: at android.os.Looper.loop(Looper.java:153)WindowManager: at android.app.ActivityThread.main(ActivityThread.java:5299)WindowManager: at java.lang.reflect.Method.invokeNative(Native Method)WindowManager: at java.lang.reflect.Method.invoke(Method.java:511)WindowManager: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)WindowManager: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)WindowManager: at dalvik.system.NativeStart.main(Native Method)
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AlertDialog.Builder info = new Builder(this);
info.setTitle("Dialog").setPositiveButton("OK", null).setMessage("This is a Dialog");;
info.show();
finish();
}